迭代器模式

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