// 迭代器是一个接口,为不同的数据结构提供统一访问的机制
// js里面的iterator接口就是对象里面的一个属性,属性的名字就叫symbol.iterator
// for ... in 循环保存的是键名 for ... of循环保存的是键值
/*
工作原理:
1.先创建一个指针对线,指向当前数据结构的起始位置
2.第一次调用对象的next方法,指针自动指向数据结构的第一个成员
3.接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
4.每调用next方法返回一个包含value和done属性的对象
*/
const banji = {
name: "终极一班",
stus: [
"xiaoming",
"xiaoning",
"xiaotian",
"knight"
],
[Symbol.iterator]() {
let index = 0;
return {
next: () => {
if (index < this.stus.length) {
const result = { value: this.stus[index], done: false };
index++;
return result
}
else {
return { value: undefined, done: true }
}
}
}
}
}
for (let v of banji) {
console.log(v)
}