我们封装一个迭代器函数,来实现类似jQuery的 $.each()方法的迭代效果;\
var each = function(arr,callbreak){
for(var i=0;i<arr.length;i++){
callbreak.call(arr[i],i,arr[i]);
};
};
each([1,2,3],function(a,b){
console.log(a,b);
});
现在我们增加一个需求 , 需要判断这两个数组是否相等,这时就要返回去修改封装好的each()方法,这里就牵出一个问题
这个方法看似简单易用,但是拓展麻烦,不好维护,
用迭代器模式改写这个each方法:
var iterator = function(arr){
var num = 0,
next = function(){
current += 1;
},
down = function(){
return num >= arr.length;
},
getItem = function(){
return arr[num];
},
getLemngth = function(){
retrun arr.length;
};
return {
num : num,
next : next,
down : down,
getItem : getItem,
getLength : getLength
};
};
var each = function(arr1,arr2){
while( !arr1.down && !arr2.down){//当传进来的两个参数都不为空的时候再进行循环
if( arr1.getItem() != arr2.getItem || arr1.getLength != arr2.getLength ){
throw new Error('不相等');
//此处省略 ..... (业务逻辑)
}
arr1.next();
arr2.next();
};
alert('相等');
//此处省略 ..... (业务逻辑)
};
var arr1 = iterator([1,2,3]),
arr2 = iterator([1,2,3,4]);
each(arr1,arr2);//throw new Error('不相等');