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
外部迭代器
就是通过一个外部对象来访问一个对象的属性,方法与上面的大同小异就不多写了。
热门相关:仙城纪 时间都知道 惊世毒妃:轻狂大小姐 重生之至尊千金 学霸女神超给力