我尝试在ES6+类中声明私有Symbol属性,下面的方法都是错误的。
class MyClass {
#[Symbol.for('my-symbol-prop1')] = 'my-symbol-prop1'; // SyntaxError
[#Symbol.for('my-symbol-prop1')] = 'my-symbol-prop1'; // SyntaxError
}
我的问题:有没有办法声明一个真正的私有Symbol属性,只需使用像
#myPrivateSymbolfield
这样的哈希符号,不要使用WeakMap
或enclosure approach
目前在 JavaScript 中,没有直接的方法可以使用私有字段语法 (#) 创建私有 Symbol 属性。私有字段功能和符号属性有不同的用途。话虽如此,您可以轻松地解决相同的问题,即使用私有字段来存储符号,如代码片段所示:
class MyClass {
[Symbol.for('my-symbol-prop')] = 'symbol';
// Private Symbol wokraround using private field
#privateSymbol = Symbol('privateSymbol Desc');
constructor() {
// The Symbol itself can be accessed via the getter
// but the property using this Symbol is still private
this[this.#privateSymbol] = 'private symbol value';
}
// Getter to access the private symbol value
get privateSymbolValue() {
return this[this.#privateSymbol];
}
}
const instance = new MyClass();
console.log(instance.privateSymbolValue);