如何通过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']不访问

  1. 这会使属性访问语义复杂化。

  2. 对私有字段的动态访问与"私有"的概念相反。例如,这涉及:

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.#xthis['#x']不同的语义难道不打破当前语法的不变吗

不完全是这样,但这是一个令人担忧的问题。this.#x以前从未法律语法,所以从一个角度来看,不可能有不变量

另一方面,它们的不同可能令人惊讶是当前提案的不利方面。

另请参阅此问题。

最新更新