此代码有效:
class Test {
#field
get field() {
return this.#field;
}
}
但是,如果我想计算字段名称,我必须使用方括号,但它不起作用:
class Test {
#field;
get field() {
return this['#field'];
}
}
有没有办法获得具有计算名称的私有字段?
此代码有效:
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
以前从来没有合法的语法,所以从一个角度来看,它不可能是不变的。另一方面,它们的不同可能令人惊讶,这是当前提案的缺点。
另请参阅此问题。