我似乎无法使用符号命名的方法成为可能。
class Mar {
sym = Symbol("sym");
*[this.sym]() {
yield 1;
yield 2;
yield 3;
}
}
const a = new Mar();
console.log([...a[a.sym]()]);
似乎没有在任何地方定义
Mar#[MarInstance.sym]
。我想念什么? 最佳答案
如果必须共享该方法,则必须在构造函数中(按实例)显式创建该方法,或者在原型上显式创建该方法:
class Mar {
sym = Symbol("sym");
constructor() {
this[this.sym] = function*() {
yield 1;
yield 2;
yield 3;
};
}
}
要将其放在原型上,您必须根据自己的意愿使
sym
为类属性或类似的属性。编辑-如果您希望由该类的所有实例共享一个Symbol,则可以为该符号使用静态的class属性。语法仍然有些笨拙,但是您可以将类实例化包装在函数中:
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实例作为访问方法的方式尚不能完全弄清楚您要实现的目标,但是这些都是实现此目标的方法。
关于javascript - 用符号命名的方法不会返回可迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60816268/