【问题标题】:How to call a reference to myArray[Symbol.iterator]如何调用对 myArray[Symbol.iterator] 的引用
【发布时间】:2018-09-25 01:44:36
【问题描述】:

我不明白以下错误的含义。我想要做的是存储对 myIteratble[Symbol.iterator] 的引用并稍后调用它。但我收到以下错误。

let str = 'foo';
let gen = str[Symbol.iterator];
console.log(typeof gen);    // 'function'
let it = gen();             // ERROR: Can't convert undefined to object.

为什么我不能调用 gen?我意识到我可以通过以下 hack 解决这个问题:

let gen = function* () {
    let it = str[Symbol.iterator]();
    for (let n = it.next(); !n.done; n = it.next()) {
        yield n.value;
    }
}

但我想了解这里发生了什么。

【问题讨论】:

    标签: javascript iterator symbols


    【解决方案1】:

    生成器依赖于它的调用上下文作为基础对象,这在您的示例中是缺失的。使用.bind 确保其调用上下文是您的str

    const str = 'foo';
    const gen = str[Symbol.iterator].bind(str);
    const it = gen(); 
    console.log(it.next());

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 2017-03-02
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多