如何调用对 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());
我不明白下面错误的意思。我想要做的是存储对 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());