概念
迭代器模式是指提供一种方法顺序访问一个对象中的各个元素,又不需要暴露该对象的内部。
示例
1.内部迭代器
var each = function(arr, callback) {
for(let i=0,l = arr.length;i < l;i++) {
callback.call(arr[i], i, arr[i])
}
};
each([1,2,3,4],function( i, n) {
console.log( i, n)
})
each 函数属于内部迭代器,函数内部已经定好了迭代规则,调用非常方便,但无法同时迭代2个数组。
2.外部迭代器
let iterator = function(obj) {
let current = 0 //
let next = function() {
current += 1
}
let isDone = function() {
return current >= obj.length
}
let getcurrent = function(){
return obj[current]
}
return {
next: next,
isDone: isDone,
getCurrItem: getcurrent
}
}
let compare = function(iterator1, iterator2) {
while( !iterator1.isDone() && !iterator2.isDone()){
if ( iterator1.getcurrent() !== iterator2.getcurrent() ){
throw new Error ( 'iterator1 和 iterator2 不相等' );
}
iterator1.next();
iterator2.next();
}
}
var iterator1 = Iterator( [ 1, 2, 3 ] );
var iterator2 = Iterator( [ 1, 2, 3 ] );
compare( iterator1, iterator2 ); // 输出:iterator1 和 iterator2 相等
外部迭代器相对比较复杂,但是可以实现更多的需求,也能满足更多变的需求,两种迭代器没有优劣之分,按场景来判断究竟使用哪个迭代器。