我正在尝试新的类私有成员功能 但是,我很快遇到了一个问题:如何动态访问它们?
我希望它遵循任何一个预先存在的语法
constructor(prop, val) {
this[`#${prop}`] = val; // undefined
}
或者
constructor(prop, val) {
this.#[prop] = val; // syntax error
}
但是,以上两种方法都失败了。
我正在尝试新的类私有成员功能 但是,我很快遇到了一个问题:如何动态访问它们?
我希望它遵循任何一个预先存在的语法
constructor(prop, val) {
this[`#${prop}`] = val; // undefined
}
或者
constructor(prop, val) {
this.#[prop] = val; // syntax error
}
但是,以上两种方法都失败了。
另一种选择是为您要动态访问的密钥设置一个私有对象:
class privateTest {
#pvt = {}
constructor(privateKey, privateVal) {
this.#pvt[privateKey] = privateVal;
}
getPrivate(privateKey) {
return this.#pvt[privateKey];
}
}
const test = new privateTest('hello', 'world');
console.log(test.getPrivate('hello')) // world
我认为您不能动态访问私有字段。该提案说:
没有私有计算属性名称:
#foo
是私有标识符,并且#[foo]
是语法错误。
从关于私有财产提案的常见问题解答中:
对私有字段的动态访问与“私有”的概念相反。
缺乏对私有字段的动态访问是设计使然。
如果你真的想这样做。
eval(`this.#${propertyName}`)
但这只是打开了一个非常丑陋的蠕虫罐头。