Javascript迭代器不';不行

Javascript迭代器不';不行,javascript,iterator,Javascript,Iterator,for()行中出现错误: 因此,不可能像在PHP中那样将迭代器与我们自己的类一起使用?这不起作用,因为您没有正确地实现iterable协议。要使对象成为iterable,它必须有一个@@iterator键(您有),该键返回一个迭代器,这就是您缺少的迭代器(数组是iterable,但不是迭代器) 但是,由于数组是iterable,因此可以使用其@@iterator属性为其获取iterable。然后你可以把它退回 类列表{ 构造函数(){ 这个数据=[1,2,3]; } [符号.迭代器](){ 返

for()行中出现错误:


因此,不可能像在PHP中那样将迭代器与我们自己的类一起使用?

这不起作用,因为您没有正确地实现iterable协议。要使对象成为iterable,它必须有一个
@@iterator键(您有),该键返回一个迭代器,这就是您缺少的迭代器(数组是iterable,但不是迭代器)

但是,由于数组是iterable,因此可以使用其
@@iterator
属性为其获取iterable。然后你可以把它退回

类列表{
构造函数(){
这个数据=[1,2,3];
}
[符号.迭代器](){
返回此.data[Symbol.iterator]();
}
}
让列表=新列表();
对于(让我列出)

控制台日志(i)这不起作用,因为您没有正确实现iterable协议。要使对象成为iterable,它必须有一个
@@iterator键(您有),该键返回一个迭代器,这就是您缺少的迭代器(数组是iterable,但不是迭代器)

但是,由于数组是iterable,因此可以使用其
@@iterator
属性为其获取iterable。然后你可以把它退回

类列表{
构造函数(){
这个数据=[1,2,3];
}
[符号.迭代器](){
返回此.data[Symbol.iterator]();
}
}
让列表=新列表();
对于(让我列出)

控制台日志(i)
您可以将对象的
[Symbol.iterator]
属性设置为生成器而不是函数,只需使用
*
单独生成列表元素即可:

类列表{
构造函数(){
这个数据=[1,2,3];
}
*[符号.迭代器](){
产生*这个数据;
}
}
让列表=新列表();
对于(让我列出){
控制台日志(i);

}
您可以将对象的
[Symbol.iterator]
属性设置为生成器而不是函数,只需使用
*
单独生成列表元素即可:

类列表{
构造函数(){
这个数据=[1,2,3];
}
*[符号.迭代器](){
产生*这个数据;
}
}
让列表=新列表();
对于(让我列出){
控制台日志(i);

}
我想你需要返回一个迭代器,而不是一个iterable–
返回这个.data[Symbol.iterator]()
我用
*[Symbol.iterator](){for(让I of this.data)yield I;}
我想你需要返回一个迭代器,而不是iterable–
返回这个.data[Symbol.iterator]()
我用
修复了它*[Symbol.iterator](){for(让我知道这个.data)产生i;}
啊!忍者!我将删除我的答案。啊!忍者!我将删除我的答案。
class List{
  constructor(){
    this.data = [1,2,3];
  }

  [Symbol.iterator](){
    return this.data;
  }

}


let list = new List();
for(let i of list)
  console.log(i);
Uncaught TypeError: undefined is not a function