自定義@@iterator

@@iterator是一個可以返回迭代器對象的函數。

調用迭代器的next()方法會返回形式爲{value: .. , done: ..} 的值, value是當前的遍歷值, done是一個布爾值, 表示遍歷是否結束。

var obj = {
    a: 2,
    b: 3
}

Object.defineProperty(obj, Symbol.iterator, {
    writeable: false,
    enumerable: false,
    configurable: true,
    value: function() {
        let o = this,
            index = 0,
            keys = Object.keys(o);
        return {
            next: function() {
                return {
                    value: o[keys[index++]],
                    done: index > keys.length
                }
            }
        }
    }
})

let it = obj[Symbol.iterator]();
console.log(it.next());
console.log(it.next());
console.log(it.next());

// for .. of 會尋找內置或者自定義的@@iterator對象並調用它的next()方法來遍歷數據值。
for(let k of obj) {
    console.log(k);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章