迭代器iterator
是一种 ES6 规范,具有这种机制的数据结构才可以使用for of
循环:返回每一项的值;
原型链具有Symbol.iterator
属性的数据结构都具备;如数组、部分类数组、字符串等;
普通对象就不能用;
for-of循环原理:循环获取属性值;
- 执行可迭代原型链上的
Symbol.iterator
方法,该方法返回一个包含next方法
的对象; - 通过循环执行
next方法
,得到方法返回的对象,根据对象中值抛出返回值;
js
let obj = {
name: 'aa',
age: 10,
}
Object.prototype[Symbol.iterator] = function iterator() {
let self = this,
index = -1,
keys = Reflect.ownKeys(self)
console.log(keys) // ['name', 'age']
return {
next() {
index++
if (index > keys.length - 1) {
return {
done: true,
value: undefined,
}
}
return {
done: false,
value: self[keys[index]],
}
},
}
}
for (const iterator of obj) {
console.log(iterator) // aa 10
}