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);
for()行中的错误:
Uncaught TypeError: undefined is not a function
因此不可能像在PHP中那样对我们自己的类使用迭代器?
答案 0 :(得分:2)
这不起作用,因为您没有正确实现可迭代协议。要使对象成为可迭代对象,它必须具有一个@@iterator
键(您拥有),它返回一个迭代器,这正是您所缺少的(数组是可迭代的,但不是迭代器)。
但是,由于数组是可迭代的,因此您可以使用其@@iterator
属性来获取可迭代的数组。然后您可以将其退回。
class List{
constructor(){
this.data = [1,2,3];
}
[Symbol.iterator](){
return this.data[Symbol.iterator]();
}
}
let list = new List();
for(let i of list)
console.log(i);
您可以了解有关Javascript iterable/iterator protocol here的更多信息。
答案 1 :(得分:2)
您可以使对象的[Symbol.iterator]
属性成为生成器而不是函数,并仅使用*
产生列表元素:
class List {
constructor() {
this.data = [1, 2, 3];
}
*[Symbol.iterator]() {
yield* this.data;
}
}
let list = new List();
for (let i of list) {
console.log(i);
}