如何调用对 myArray[Symbol.iterator] 的引用

How to call a reference to myArray[Symbol.iterator]

我不明白下面错误的意思。我想要做的是存储对 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?我意识到我可以通过以下技巧解决这个问题:

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

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

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

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