本文最后更新于 2024-03-23T16:42:03+00:00
迭代器模式:提供统一的方法来顺序访问集合对象(数组、对象、树等)的元素,而无需暴露该集合的内部表示。
普通迭代器:
1 2 3 4 5 6 7 8 9 10
| const each = function(arr, cb) { for(let i = 0, l = arr.lenght; i < l; i++) { cb(i, arr[i], arr) } }
each([1, 2, 3], function(index, item){ console.log(index) console.log(item) })
|
ES6 中,引入了迭代协议,用于创建迭代器对象,使用迭代器对象可以让其他对象可迭代
可迭代协议用来定义迭代行为,要求对象必须有[Symbol.Iterator]
方法
迭代器协议用来定义具体的迭代操作,要求对象必须有next()
方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class MyIterable { constructor(data) { this.data = data; } [Symbol.iterator]() { let index = 0;
return { next: () => { if (index < this.data.length) { return { value: this.data[index++], done: false }; } else return { done: true }; }, }; } }
const myArray = new MyIterable([1, 2, 3]);
for (let item of myArray) { console.log(item); }
|
总结:就是专门创建一个方法,支持循环访问集合