使用for...of遍历对象

212 阅读1分钟
let obj2 = {
    name: "XX",
    age: 20,
    job: 'teacher',
    [Symbol.iterator]() {
        const self = this;
        const keys = Object.keys(self);
        let index = 0;
        return {
            next() {
                if (index < keys.length) {
                    return {
                        value: self[keys[index++]],
                        done: false
                    };
                } else {
                    return { value: undefined, done: true };
                }
            }
        };
    }
};
 
for(let item of obj) {
    console.log(item); //XX  20  teacher
}


class Obj1 {
    name = "rz";
    age = 11;
    [Symbol.iterator]() {
        const self = this;
        const keys = Object.keys(self);
        let index = 0;
        return {
            next() {
                if (index < keys.length) {
                    return {
                        value: self[keys[index++]],
                        done: false
                    };
                } else {
                    return { value: undefined, done: true };
                }
            }
        };
    }
}

function Obj(name, age) {
    this.name = name;
    this.age = age;
}

Obj["prototype"][Symbol.iterator] = function () {
    const self = this;
    const keys = Object.keys(this);
    let index = 0;

    return {
        next () {
            if (index < keys.length) return { value: self[keys[index++]], done: false };
            return {value: undefined, done: true};
        }
    }

}

const obj = new Obj("rz", 22);



for (let i of obj) {
    console.log(i);
}