JavaScript 迭代器不起作用
2018-10-11
65
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 中一样,我们无法将迭代器与我们自己的类一起使用吗?
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 可迭代对象/迭代器协议 的更多信息。
CRice
2018-10-11
您可以将对象的
[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);
}
Mark
2018-10-11