Javascript 我可以用一个简单的函数生成迭代器吗?(无生成器或符号。迭代器)

Javascript 我可以用一个简单的函数生成迭代器吗?(无生成器或符号。迭代器),javascript,iterator,iterable,Javascript,Iterator,Iterable,我一直在尝试使用普通函数制作迭代器,不使用生成器,也不使用符号.iterator协议用于学术目的。为此,我创建了一个函数,它返回一个带有next参数的对象,但尝试将其作为For…of循环的iterable参数运行会产生不需要的结果 以下是迄今为止我的代码,我从 在控制台上,我只得到一个结果:next 我是否在创建函数时出错了?或者for…of是否仅设计用于生成器和符号.iterator属性 在节点v8.11.1上执行问题在于迭代器此函数返回迭代器,但for/of构造需要一个iterable 好的

我一直在尝试使用普通函数制作迭代器,不使用生成器,也不使用
符号.iterator
协议用于学术目的。为此,我创建了一个函数,它返回一个带有
next
参数的对象,但尝试将其作为
For…of
循环的
iterable
参数运行会产生不需要的结果

以下是迄今为止我的代码,我从

在控制台上,我只得到一个结果:
next

我是否在创建函数时出错了?或者
for…of
是否仅设计用于生成器和
符号.iterator
属性


在节点v8.11.1上执行

问题在于
迭代器此
函数返回迭代器,但
for/of
构造需要一个iterable

好的,等等,有什么区别吗?

发件人:

为了iterable,对象必须实现
@@iterator
方法,这意味着对象(或其中一个对象)将 原型链)必须有一个具有
@@iterator
键的属性,该键是 可通过常量
符号访问。迭代器

另一方面:

当对象使用 以下语义:Ommited由于长度,TL;博士:下一个方法是什么 返回以下形式的对象:
{value:T,done:boolean}

它们的关系在于调用iterable的
@@iterator
方法返回一个迭代器

for/of
循环总是需要一个iterable,因此如果要使用
for/of
,必须使用
@@iterator
/
符号。iterator
。就我所知,这是没有办法的。但是,只要创建一个对象,当它是
Symbol时返回迭代器,就可以轻松地修改代码段以使用它。迭代器
方法被调用:

函数迭代此(arr){
设i=0;
返回{
下一步:函数(){
返回i}
iterator对象是用一种特殊的结构构建的,这种结构允许在
中使用
for对其进行迭代。如果不通过迭代器公共符号应用迭代器逻辑,我看不出在任何级别上都可能复制效果。它超出了本机功能。
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);
}