// 对Object进行原型编程
Object.prototype[Symbol.iterator] = function* () {
let index = 0;
let arr = Object.entries(this);
let length = arr.length;
while (true) {
if (index >= length) {
return false
} else {
let key = arr[index] && arr[index][0];
let text = arr[index] && arr[index][1];
let value = { [key]: text };
index++;
yield value
}
}
};
// 测试
const myObj = {
a: 1,
b: 2,
c: 3,
}
for (const [value] of myObj) {
console.log(value);
}
/*
输出:
{a: 1}
{b: 2}
{c: 3}
*/
补充:Symbol.iterator
ES6 规定,默认的 Iterator 接口部署在数据结构的
Symbol.iterator
属性,或者说,一个数据结构只要具有Symbol.iterator
属性,就可以认为是“可遍历的”(iterable)。
Symbol.iterator:
是一个表达式,返回Symbol
对象的iterator
属性,这是一个预定义好的、类型为 Symbol 的特殊值,所以要放在方括号内。