迭代器模式
Iterator
- 概述
- 创建迭代器接口
- ES5中自定义迭代器
-
Iterator - 具体的业务逻辑由回调函数cb实现,如页面渲染 let iterator = function (arr, cb) { arr.forEach((item, ind) => { cb(ind, item) }) } iterator([1, 2, 3, 4, 5, 6, 7, 8, 9], (key, val) => { console.log(key, val); })
- ES6中提供有迭代器 Iterator对象:Array、String、Set、Arguments、NodeLists,使用 for-of 即可迭代其中的数据
- 对象Object虽然可以使用 for-in 遍历,但是这个不是迭代;通过序列化和增加长度属性可以实现迭代
-
Iterator - Object不支持迭代 let obj = { name: 'gl', age: 20, gender: 'male' } //OK for (val in obj) { console.log(obj[val]); } //Uncaught TypeError: obj is not iterable for (val of obj) { console.log(val); }
-
Iterator - 改造后的obj let obj = { 0: "gl", 1: 20, 2: "male", length: 3, [Symbol.iterator]: Array.prototype[Symbol.iterator] } for (val of obj) { console.log(val); }
- 应用
- 参考代码
-
Iterator -
Usage