zoukankan      html  css  js  c++  java
  • 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);
    }
    是不是很不可思议 
     
  • 相关阅读:
    11
    消除左递归
    4.K均值算法--应用
    3.K均值算法
    2.机器学习相关数学基础作业
    机器算法学习第一次作业
    第十五次作业
    第十四次作业
    第十三次作业
    第十二次作业
  • 原文地址:https://www.cnblogs.com/me-data/p/9865541.html
Copyright © 2011-2022 走看看