javascript - 无法在使用 *[Symbol.iterator]() 生成器 javascript 创建的可迭代对象上使用 next()
问题描述
我试过用谷歌搜索这个并查看类似的问题,但我似乎错过了一些基本的东西
let collection = {
items: [],
*[Symbol.iterator]() {
for (let item of this.items) {
yield item;
}
}
}
collection.items.push(1);
collection.items.push(2);
console.log(collection.next());
这会引发错误
console.log(collection.next());
^
TypeError: collection.next is not a function
根据我的阅读,我应该能够在集合对象上使用 next() ,因为这会调用 Symbol.iterator 属性?
解决方案
需要调用[Symbol.iterator]()
方法获取迭代器对象,然后next()
在返回的对象上调用方法:
let collection = {
items: [],
*[Symbol.iterator]() {
for (let item of this.items) {
yield item;
}
}
};
collection.items.push(1);
collection.items.push(2);
let iterator = collection[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
请记住,数组本身已经实现了可迭代协议,实际上您通过使用循环在[Symbol.iterator]()
定义中使用了该协议,因此该对象在这里并不是必需的:for...of
collection
let items = [];
items.push(1);
items.push(2);
let iterator = items[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
推荐阅读
- prolog - Prolog 在数组/列表中显示结果
- mysql - mysql字符串变成IN子句分割字符串什么的?
- r - RStudio 无法加载 web 文件,但终端中的 R 可以;为什么?
- spring-boot - SpringBoot-Websphere-Java Config-web.xml-resource-ref
- tensorflow - TensorFlow 会话失败,错误未编译为使用 AVX2
- reactjs - Redux 传奇如何阻止动作进一步传播
- python - 在pycharm中调试时,内存会随着日志不断增加
- android - Layerlist drawable 不能很好地拉伸
- excel - 需要帮助理解 Excel 中的不同时间值
- java - 注册警报接收器