迭代器模式
定义:提供一种方法 顺序访问 聚合元素中的各个元素,而不需要暴露对象的内部表示
迭代器模式可以把迭代的过程从业务逻辑中分离出来
实现
我们可以使用 JavaScript 实现一个最简化的 迭代器 模型
var each = function (arr, callback) {
for (var i = 0; i < arr.length; i++) {
callback(arr[i]);
}
};
each([1, 2, 3], function (i) {
console.log(i + 10);
});
内部迭代器
上面就是一个内部迭代器,迭代规则在内部定义,迭代器完全接手数据迭代,只需要调用一次就可以完成迭代
外部迭代器
外部迭代器必须 显式请求 迭代下一个元素,增加了调用的复杂度和灵活性
外部迭代器通过实现 Iterator 类帮助进行聚合元素的迭代
var Iterator = function (obj) {
var current = 0; // 内部指针
var next = function () {
// 遍历下一个
current += 1;
};
var isDone = function () {
// 判断是否遍历完毕
return current >= obj.length;
};
var getCurrItem = function () {
// 返回当前元素
return obj[current];
};
return {
next: next,
isDone: isDone,
getCurrItem: getCurrItem,
};
};
var list = [1, 2, 3];
var iterator = Iterator(list); // 获取迭代器
while (!iterator.isDone()) {
console.log(iterator.getCurrItem() + 10); // 输出当前值 + 10
iterator.next(); // 迭代下一个
}
迭代 - 类数组 & 字面量对象
迭代器模式还可以迭代 arguments、字典 之类的对象
中止迭代器
通过判断 callback == true / false 来执行 break 中止迭代器也是有效的