ES6 Iterator 在简单对象中的实现

70 阅读1分钟
// Iterator
{
  let arr = ['hello', 'world']
  let map = arr[Symbol.iterator]()
  console.log(map.next())
  console.log(map.next())
  console.log(map.next())
}
{
  // 实现iterator
  let obj = {
    start: [1,3,2],
    end: [7,9,8],
    [Symbol.iterator]() {
      let self = this
      let index = 0
      let arr = self.start.concat(self.end)
      let len = arr.length
      return {
        next() {
          if (index < len) {
            return {
              value: arr[index++],
              done: false
            }
          } else {
            return {
              value: arr[index++],
              done: true
            }
          }
        }
      }
    }
  }
  for (const key of obj) {
    console.log(key)
  } // 1 3 2 7 9 8
}