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