给对象部署默认Symbol.iterator接口机制

266 阅读1分钟

由于对象不用默认的Symbol.iterator接口机制,如果想用Symbol.iterator这种方法,就需要给它部署Symbol.iterator 并且由于没有默认Symbol.iterator接口机制,无法用for...of遍历

// 声明一个对象为例
let obj = {
    name : "毛毛虫",
    age : 26,
};
// 给对象部署Symbol.iterator接口机制
obj[Symbol.iterator] = function () {
    // 获取元素
    let keys = Object.keys(obj);
    // 声明一个变量,记录索引
    let idx = 0 ; 
    // 返回next方法
    return {
        next : () => {
        // 获取对应key
        let key = keys[idx++];
        // 获取对应key的值
        let val = this[key];
        // 判断循环完毕条件
        if (idx <= keys.length){
            return {value:val,done:false}
        } else {
            return {value:undefined,done:true}
        }
      }
    }
};
for(o of obj){
    console.log(o) // 毛毛虫 26
}