[英]How to get access to private field via square brackets in JavaScript
此代码有效:
class Test {
#field
get field() {
return this.#field;
}
}
但是,如果我想计算字段名称,我必须使用方括号,但它不起作用:
class Test {
#field;
get field() {
return this['#field'];
}
}
有没有办法获得具有计算名称的私有字段?
交出一个有特殊含义的字符串,好像是个问题。
如果真的有必要,你评估一个字符串。
class Test { #field = 'foo'; get field() { return eval('this.' +'#field'); } } console.log(new Test().field)
这不可能。 从提案中:
没有私有计算属性名称:
#foo
是私有标识符,#[foo]
是语法错误。
为什么
this['#x']
不访问名为#x
的私有字段,因为this.#x
可以访问?
这会使属性访问语义复杂化。
对私有字段的动态访问与“私有”的概念相反。 例如,这是关于:
class Dict extends null { #data = something_secret; add(key, value) { this[key] = value; } get(key) { return this[key]; } } (new Dict).get('#data'); // returns something_secret
但是不给
this.#x
和this['#x']
不同的语义会破坏当前语法的不变性吗?不完全是,但这是一个问题。
this.#x
以前从来都不是合法的语法,所以从一个角度来看,它不可能是不变的。另一方面,它们的不同可能令人惊讶,这是当前提案的缺点。
另请参阅此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.