Open shfshanyue opened 3 years ago
普通对象可以通过添加一个Symbol.iterator
属性,实现使用 for of
遍历
const obj = {a: 1, b: 2, c: 3}
obj[Symbol.iterator] = function () {
let i = 0
const keys = Object.keys(this)
return {
next: () => {
return i <= keys.length - 1 ?
{value: this[keys[i++]], done: false} :
{value: undefined, done: true}
}
}
}
for (let item of obj) {
console.log(item)
}
// 1
// 2
// 3
for of
遍历每次都会调用 Symbol.iterator
中的 next
方法
Reflect.ownKeys({ a: 3, b: 4})
Object.keys({ a: 3, b: 4 })