JS中自定义迭代协议
/* 迭代对象 实现了迭代器的对象 迭代器:方法 [Symbol.iterator] */ var obj = { left: 100, top: 200 }; // 迭代协议 obj[Symbol.iterator] = function() { let keys = Object.keys(obj); //['left','top'] let len = keys.length; let n = 0; return { next: function() { if (n < len) { return { value: {k: keys[n], v: obj[keys[n++]]}, done: false } } else { return { done: true } } } } } // obj[Symbol.iterator]().next() => {done: true} for (var {k, v} of obj) { //of 是一个可迭代的对象 console.log(k, v); }
for of可以迭代实现了迭代协议的对象,每一次循环会执行迭代对象的迭代协议
obj[Symbol.iterator]().next()
应该又是抄的python的迭代器概念。
可以在next函数种定义你想要的迭代方式,返回值done如果是true的时候将停止迭代
value定义每次迭代拿到的内容!