对象
- 对象如下
const obj ={left: 100,top: 200
}
- 不可迭代
for(let attr of obj){console.log(attr);
}
迭代规则
- 可迭代,所具有的属性
- [Symbol.iterator]
- 需要自己给obj添加迭代规则
obj[Symbol.iterator] = () =>{// 获取obj的所有键let keys = Object.keys(obj);let len = keys.length;let i = 0;// 迭代规则写在next函数中return{next: ()=>{return i< len?{ value:obj[keys[i++]], done:false }:{ done: true}}}
}
进一步
- 我们想通过如下方法来调用
for(let {k,v} of obj){console.log(k,v);
}
- 只要明白了解构赋值,就很简单啦
- 改进next函数
next: () =>{return i < len? {value:{k: keys[i], v: obj[keys[i++]]}, done: false} : {done: true}
}
总结:
- 1.先获取obj中的属性
- 2.未到最后一个是done属性设为false