對象
- 對象如下
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