标签:函数 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); }
是不是很不可思议
标签:函数 fine 返回 iterator one console 一个 value else
原文地址:https://www.cnblogs.com/me-data/p/9865541.html