Genluo / Precipitation-and-Summary

梳理体系化的知识点&沉淀日常开发和学习
MIT License
16 stars 1 forks source link

实现 Iterator 用于遍历 #116

Open Genluo opened 1 year ago

Genluo commented 1 year ago

如果我们需要使用 for of 遍历一个对象,需要为对象实现相应 Symbol.iterator 接口实现,例如下面这种方式:

function objectIterator() {
  const keys = Object.keys(this)
  let index = 0
  return {
    next: () => {
      const done = index >= keys.length
      const value = done ? undefined : this[keys[index]]
      index++
      return {
        done,
        value
      }
    }
  }
}

Object.prototype[Symbol.iterator] = objectIterator

const obj = {
  key: '1',
  value: '2'
}

for (const iterator of obj) {
  console.log(iterator)
}