迭代器模式(Iterator):在不暴露对象内部结构的同时,可以顺序地访问聚合对象内部的元素。
迭代器是用来顺序的访问一个聚合对象内部的元素的,可以简化我们遍历操作。
例如以一个轮播图为例,图片元素对象就是一组聚合对象,创建一个迭代器来专门处理这些图片数据。
var Iterator = function(item,container){ var container = container && document.getElementById(container) || document; var items = container.getElementsByTagName(items); var length = items.length; var index = 0; var splice = [].splice; return { //获取第一个元素 first : function(){ index = 0; return items[index]; }, //获取最后一个元素 second : function(){ index = length - 1; return items[index]; }, //获取前一个元素 pre : function(){ if(--index>0){ return items[index]; }else{ index = 0; return null } }, //获取后一个元素 next : function(){ if(++index<length){ return items[index]; }else{ index = 0; return null; } }, //获取某一个元素 get : function(num){ index = num>=0 ? num%length : num%length + length; }, //对每一个元素执行某一个方法 dealEach : function(fn){ var args = splice.call(arguments,1) for(var i=0;i<length;i++){ fn.apply(items[i],args); } }, //对某一个元素执行某一个方法 dealItem : function(num,fn){ fn.apply(this.get(num),splice.call(arguments,2)) }, //排它方式处理某一个元素 exclusive : function(num,allFn,numFn){ this.dealEach(allFn); if(Object.prototype.toString.call(num) === "[object Array]"){ for(var i=0,len=num.length;i<len;i++){ this.dealItem(num[i],numFn); } }else{ this.dealItem(num,numFn); } } } }
有了迭代器,在创建任何焦点图类,只需要使用迭代器中的创建的内部数据对象即可,想要只处理某一张图片只需要调用迭代器提供的接口方法即可。