/*
迭代对象
实现了迭代器的对象
迭代器:方法 [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定义每次迭代拿到的内容!