繁体   English   中英

如何通过JavaScript中的方括号访问私有字段

[英]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可以访问?

  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以前从来都不是合法的语法,所以从一个角度来看,它不可能是不变的。

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

另请参阅此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM