2 回答
TA贡献2041条经验 获得超4个赞
这会将属性定位在使用该类创建的对象的原型上,这可能是您想要做的:
const s = Symbol('my symbol')
class MyClass {
*[s]() {
yield 1
yield 2
yield 3
}
}
const gops = Object.getOwnPropertySymbols
const o = new MyClass()
console.log(gops(o)) // []
console.log(gops(o.__proto__).map(({description: d}) => d)) // ['my symbol']
以下类字段语法将属性s直接放在类创建的对象上:
class MyClass {
s = Symbol('my symbol')
}
const o = new MyClass()
console.log(o.hasOwnProperty('s')) // true
TA贡献1864条经验 获得超6个赞
如果应该共享,您必须在构造函数(每个实例)中显式创建方法,或者在原型上显式创建方法:
class Mar {
sym = Symbol("sym");
constructor() {
this[this.sym] = function*() {
yield 1;
yield 2;
yield 3;
};
}
}
要将其放在原型上,您必须sym根据您的意图创建一个类属性或类似的东西。
编辑——如果您希望类的所有实例共享一个符号,那么您可以为符号使用静态类属性。语法仍然有点笨拙,但你可以做的是将类实例化包装在一个函数中:
const Mar = function() {
const sym = Symbol("sym");
class Mar {
*[sym]() {
yield 1; yield 2; yield 3;
}
}
Mar.sym = sym;
return Mar;
}();
let m = new Mar();
console.log([...m[Mar.sym]()]);
通过将 Symbol 实例作为访问方法的一种方式,您试图实现的目标并不完全清楚,但这些是实现它的方法。
添加回答
举报
