迭代器 (Iterator)
在上次的博客中我们遗留了一个问题:for…of… 对普通对象进行遍历会出现错误。如果要对普通对象进行for…of…循环的话;这个时候就需要用到迭代器了。
举个例子:
const set = new Set(['foo', 'bar', 'baz'])
const iterator = set[Symbol.iterator]()
console.log(iterator.next()); // { value: 'foo', done: false }
console.log(iterator.next()); // { value: 'bar', done: false }
console.log(iterator.next()); // { value: 'baz', done: false }
console.log(iterator.next()); // { value: undefined, done: true }
// 上面的代码证明只要实现了iterator接口都是可以用for... of...来进行循环的
至于说怎么实现可迭代接口,小编在下面罗列出来了。
const sss = {
left: ['吃饭', '睡觉', '打豆豆'],
learn: ['语文', '数学', '英语'],
hobit: ['喝茶', '下棋'],
[Symbol.iterator]: function () {
const all = [...this.left, ...this.learn, ...this.hobit]
let index = 0
return {
next: function () {
return {
value: all[index],
done: index++ >= all.length
}
}
}
}
}
for (const item of sss) {
console.log(item);
}