我似乎无法使用符号命名的方法成为可能。

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/

10-10 09:33