iterator 和yield的关系
var obj={a:1,b:2}; obj[Symbol.iterator]=function(){ var arr=Object.keys(obj); var me=this; return { index:0, next:function(){ return {done:this.index>=arr.length,value:me[arr[this.index++]]}; } } } obj[Symbol.iterator]=function* (){ var me=this; var arr=Object.keys(this); var i=0; while(i<arr.length){ yield this[arr[i]]; i+=1; } } for(var i of obj){ console.log(i); }
可以知道Symbol.iterator是等价的 那么 这个是一个函数 返回一个对象 对象有next方法 yield其实就是返回一个新的遍历器的值