【发布时间】:2020-04-13 21:44:44
【问题描述】:
我正在试用新的class private member feature ????但是,我很快遇到了一个问题:如何动态访问它们?
我希望它遵循任何一个预先存在的语法
constructor(prop, val) {
this[`#${prop}`] = val; // undefined
}
或
constructor(prop, val) {
this.#[prop] = val; // syntax error
}
但是,以上两种方法都失败了。
【问题讨论】:
-
您是否尝试过先创建属性并进行设置?
-
是的,我实际将它们预先声明为空对象。如果我在构造函数中手动枚举它们并将它们设置为 val,那么效果很好(尽管非常乏味和脆弱),但是包罗万象的 get 和 set 有同样的问题——这违背了它们的目的,所以必须有一种动态执行此操作的方法(否则 JS 作者会做出巨大的疏忽)。
-
this[`#${prop}`]只会设置一个普通属性,因为无法判断它是私有的还是包含#的常规合法属性名称。至于tc39 proposal 中的#[prop],据说是语法错误,因为它们没有计算出的道具名称。所以当前阶段可能无法进行动态访问 -
呃,我希望这不会是一个禁止性/排他性的限制。 MDN 文档表明
#只是名称的一部分,因此基于此,我希望串联能够正常工作???? -
@jacob 检查adriancg 答案
标签: javascript private private-members class-fields