编辑代码

// 迭代器是一个接口,为不同的数据结构提供统一访问的机制
// 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)
}