js实现对object使用for of

191 阅读1分钟

mdn对for of的描述:developer.mozilla.org/zh-CN/docs/…

要在对象上使用for of,关键在于给对象添加Symbol.iterator这个属性,属性值为一个生成器函数。

生成器函数返回一个迭代器

迭代器是一个对象,对象内部有next方法,next方法调用返回一个对象,包含value和done两个属性。

const obj = {a: 1, b: 2};

obj[Symbol.iterator] = function* () {
    const values = Object.values(this)
    for(let value of values) {
        yield value;
    }
}

也可以直接加到Object.prototype上

Object.prototype[Symbol.iterator] = function* () {
  const values = Object.values(this);
  for(let value of values) {
    yield value;
  }
}