js设计模式之迭代器模式学习笔记--封装简单的数组迭代器

来源:互联网 发布:淘宝衣服女装 编辑:程序博客网 时间:2024/05/02 13:05

我们封装一个迭代器函数,来实现类似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('不相等');



原创粉丝点击