const author = {
allAuthor: {
test1: [1, 2, 3, 4],
test2: [5, 6, 7, 8, 9]
}
}
// author[Symbol.iterator] = function () {
// const allAuthor = this.allAuthor;
// const keys = Reflect.ownKeys(allAuthor);
// let values = [];
// return {
// next() {
// if (!values.length) {
// if (keys.length) {
// values = allAuthor[keys[0]]
// keys.shift();
// }
// }
// return {
// done: !values.length,
// value: values.shift()
// }
// }
// }
// }
author[Symbol.iterator] = function* () {
const allAuthor = this.allAuthor;
const keys = Reflect.ownKeys(allAuthor);
let values = [];
while (true) {
if (!values.length) {
if (keys.length) {
values = allAuthor[keys[0]];
keys.shift();
yield values.shift();
} else {
return false;
}
} else {
yield values.shift();
}
}
}
for (const v of author) {
console.log(v);
}
// 结果 1 2 3 4 5 6 7 8 9
- 可迭代协议,对象上拥有Symbol.iterator属性,且值为一个value
- 迭代器协议,一个对象有next方法,且返回值满足{done: true| false, value: xxx}