generator (1)

function  array () {
    console.log(arguments)
};
array(1,2,3)

 

 

从这里我们可以看出 数组的迭代方法里面有一个 属性  [Symbol.iterator]  返回一个 函数

 

所以我们先定义 初始方法

 

[Symbol.iterator]  是一个函数 函数里面有一个next方法 next  方法里面 是一个对象 对象有两个key  ,一个是done ,一个是value
 
当 index 初始值为0 ,index 不断加1 ,  this.length 为 3 ,当   this.length == index  表示 done  为true  ,结束
  let index = 0;
                return {
                    next:()=>{
                        return {done:this.length == index,value:this[index++]}
                    }
                }

demo:

function arg(){ // Symbol.iterator可以被迭代的方法 
    let arr = [
        ...{
            0:1,
            1:2,
            2:3,
            3:4,
            length:4,
            [Symbol.iterator]:function(){
                let index = 0;
                return {
                    next:()=>{
                        return {done:this.length == index,value:this[index++]}
                    }
                }
            }
        }
        ]
        console.log(arr);
}

 

 与

 [Symbol.iterator]:function * (){
           let index = 0;
            while(index != this.length){
              yield this[index++];
          }      }

相等

posted @ 2019-08-08 21:15  1点  阅读(215)  评论(0编辑  收藏  举报