1. 程式人生 > >iterator接口 ...和for of依賴的關鍵

iterator接口 ...和for of依賴的關鍵

key one let div nbsp UNC this指向 value ret

let arr = { 0: 1, 1: 2, 2: 3, length: 3 };
// arr[Symbol.iterator]=[][Symbol.iterator];
arr[Symbol.iterator] = function() {
    var tem = {
        index: 0,
    };
    //this指向的是arr
    var len = this.length;
    tem.next = function() {
        var r = {};
        //this指向tem,len形成了閉包
        //
done是遍歷器完成的標誌物 if (this.index < len) { r.value = arr[this.index++]; r.done = false; } else { r.value = undefined, r.done = true; } return r; } return tem; } for (var i of arr) { console.log(i); }

我們知道*函數依賴於next 調用碰到yield就返回 看一個例子
var obj={
    name:"jack",
    age:11,
    weight:120
}
obj[Symbol.iterator]=function* (){
    var me=this;
    var arr=Object.keys(me);
    for(var i=0;i<arr.length;i+=1){
        yield [arr[i],this[arr[i]]];
    }
}
for(var [k,v] of obj){
    console.log(k
+":"+v); }
是不是很不可思議 

 

iterator接口 ...和for of依賴的關鍵