遍历器想必大家都知道,今天自己实现了一个简单的遍历器,欢迎大家一起交流探讨。
基本实现
const obj = {0: 'a', 1: 'b',2: 'c', length:3};
obj[Symbol.iterator] = function () {
let index = 0;
return {
next: () => {
return {
value: this[index],
done: index++ === this.length
}
}
}
}
console.log([...obj]) // ['a', 'b', 'c']
观察上边的代码我们发现, 遍历器最终返回的是一个包含next方法的对象,并且next方法返回一个包含 value和done的对象。有没有觉得和generator函数很像。那接下来我们就用generator函数把刚才的遍历器重新实现一遍。
通过generator函数实现
const obj = {0: 'a', 1: 'b',2: 'c', length:3};
obj[Symbol.iterator] = function * () {
let index = 0;
while( index !== this.length) {
yield this[index++]
}
}
console.log([...obj]) // ['a', 'b', 'c']
有没有发现使用generator函数更简单了。