4、迭代器模式

迭代器模式:提供统一的方法来顺序访问集合对象(数组、对象、树等)的元素,而无需暴露该集合的内部表示。

普通迭代器:

1
2
3
4
5
6
7
8
9
10
const each = function(arr, cb) {
for(let i = 0, l = arr.lenght; i < l; i++) {
cb(i, arr[i], arr)
}
}

each([1, 2, 3], function(index, item){
console.log(index) // 0 1 2
console.log(item) // 1 2 3
})

ES6 中,引入了迭代协议,用于创建迭代器对象,使用迭代器对象可以让其他对象可迭代
可迭代协议用来定义迭代行为,要求对象必须有[Symbol.Iterator]方法
迭代器协议用来定义具体的迭代操作,要求对象必须有next()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 迭代器
class MyIterable {
constructor(data) {
this.data = data;
}
// 可迭代协议
[Symbol.iterator]() {
let index = 0;

return {
// 迭代器协议
next: () => {
if (index < this.data.length) {
return { value: this.data[index++], done: false };
} else return { done: true };
},
};
}
}

// 可迭代的数据
const myArray = new MyIterable([1, 2, 3]);

// for...of 会自动调用迭代器协议来遍历可迭代对象。
for (let item of myArray) {
console.log(item); // 输出:1, 2, 3
}

总结:就是专门创建一个方法,支持循环访问集合


4、迭代器模式
https://mrhzq.github.io/职业上一二事/前端面试/JS 设计模式/4、迭代器模式/
作者
黄智强
发布于
2024年2月13日
许可协议