随手写系列--为对象构建迭代行为来使用for of

48 阅读1分钟
function person(params) {
    this.name = 213
    this.lname = 'kk'
}
person.prototype.fname = 'k'
let temp = new person()

/**
 * 迭代器
 * @returns 
 */
Object.prototype[Symbol.iterator] = function () {
    let arr = Object.keys(this)
    let index = 0
    return {
        next: () => {
            let obj = {
                value: this[arr[index]],
                done: index >= arr.length
            }
            index++
            return obj
        }
    }
}

/**
 * 生成器
 */
Object.prototype[Symbol.iterator] = function* () {
    let arr = Object.keys(this)
    let index = 0
    while(index<arr.length) {
        let value=this[arr[index]]
        index++
        yield value
    }
}

for (const iterator of temp) {
    console.log(iterator);
}