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;
}
}