让前端飞

给js对象添加迭代器,让对象也可以使用 for...of

2020-03-26  本文已影响0人  docman

几种for对比

忘了来源哪里,望指出,侵删

迭代器

原理及实现

  1. 给对象添加一个名称为 Symbol.iterator 的属性方法。Symbol.iterator 是一个内置符号,代表一个迭代器方法。
  2. Symbol.iterator 这个方法必须返回一个迭代器对象,包含一个 next 方法

    next() 方法每次执行都返回一个结果对象,这个对象有两个属性:

    • value ,表示将要返回的值;
    • done ,是一个布尔值,表示是否进行下次迭代
  3. 迭代器还会保存一个 内部指针 ,用来指向当前集合中值的位置,每调用一次 next() 方法,都会返回下一个可用的结果对象。
var obj = { a: 1, b: 2 };

Object.prototype[Symbol.iterator] = function () {
    const keys = Object.keys(this);
    let index = 0;

    return {
        next: () => {
            return {
                value: this[keys[index++]], // 每次迭代的结果
                done: index > keys.length // 迭代结束标识 false停止迭代,true继续迭代
            };
        }
    }
}

for (let n of obj) {
    console.log(n);
    /**
     * 1
     * 2
     */
}

参考:

上一篇 下一篇

猜你喜欢

热点阅读