js里的迭代器模式

迭代器模式

迭代器模式的定义:提供一个方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示

简单来说就是实现对一个对象的迭代。。。

内部迭代器

这在ES6里已经有了原生的支持:[Symbol.iterator],该方法在所有的数组、Map、Set中都已经有了实现,所以可以通过for...of...来迭代遍历这些对象;但是对象里是没有内置该方法的,可以通过手动添加迭代器来实现对象的迭代,原理是获得对象中的所有key,然后挨个查找key对应的value。

以下是实现一个自带迭代器的类的代码:

class Obj {
    constructor() {
        this.a = "a";
        this.b = "b";
        this.c = "c";
    }
    [Symbol.iterator]() {
        const keys = Object.keys(this);
        let count = 0;
        return {
            next: () => {
                return keys[count]
                    ? { done: false, value: this[keys[count++]] }
                    : { done: true, value: undefined };
            },
            //? 迭代中途退出时使用
            return: () => {
                return { done: true };
            },
        };
    }
}
const obj = new Obj();
for (const value of obj) {
    console.log(value);
}
// a b c

外部迭代器

就是通过一个外部对象来访问一个对象的属性,方法与上面的大同小异就不多写了。

热门相关:仙城纪   时间都知道   惊世毒妃:轻狂大小姐   重生之至尊千金   学霸女神超给力