迭代器iterator
是一种 ES6 规范,具有这种机制的数据结构才可以使用for of
循环:返回每一项的值;
原型链具有Symbol.iterator
属性的数据结构都具备;如数组、部分类数组、字符串等;
普通对象就不能用;
for-of循环原理:循环获取属性值;
- 执行可迭代原型链上的
Symbol.iterator
方法,该方法返回一个包含next方法
的对象; - 通过循环执行
next方法
,得到方法返回的对象,根据对象中值抛出返回值;
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
}