【发布时间】:2018-11-27 18:54:52
【问题描述】:
我一直在尝试使用普通函数制作迭代器,不使用生成器或将Symbol.iterator 协议用于学术目的。为此,我创建了一个函数,它返回一个带有 next 参数的对象,但尝试将其作为 for...of 循环的 iterable 参数运行会产生不需要的结果。
这是我目前的代码,我从Iterators and Generators page on MDN复制过来的:
function iterateThis(arr){
let i = 0;
return {
next: function() {
return i < arr.length ?
{value: arr[i++], done: false} :
{done: true};
}
};
}
如果我尝试像这样运行它:
const iterable = iterateThis([1,2,3,4,5]);
for(item in iterable){
console.log(item);
}
在控制台上,我只得到一个结果:next。
我在创建函数iterateThis 时做错了什么吗?还是for...of 仅设计用于生成器和Symbol.iterator 属性?
在节点 v8.11.1 上执行
【问题讨论】:
-
迭代器对象使用特殊结构构建,允许使用
for-in对其进行迭代。如果您不通过迭代器公共符号应用迭代器逻辑,我看不出如何在任何级别上复制效果。它超出了本机功能。
标签: javascript iterator iterable