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

Posted me-data

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iterator接口 ...和for of依赖的关键相关的知识,希望对你有一定的参考价值。

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依赖的关键的主要内容,如果未能解决你的问题,请参考以下文章

ES6学习之Iterator和For...of循环

es6 语法 (iterator和for...of循环)

Iterator接口(遍历器)和for/of循环

ES6—— iterator和for-of循环

es6笔记 Iterator 和 for...of循环

es6 Iterator和for...of循环