码迷,mamicode.com
首页 > 其他好文 > 详细

iterator接口 ...和for of依赖的关键

时间:2018-10-28 16:04:54      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:函数   fine   返回   iterator   one   console   一个   value   else   

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依赖的关键

标签:函数   fine   返回   iterator   one   console   一个   value   else   

原文地址:https://www.cnblogs.com/me-data/p/9865541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!