迭代器模式的定义:提供一种方法访问一个聚合对象中的各个对象。可以做到不关心对象的内部构造,也可以按顺序的访问每个原宿。
内部迭代器:外部只需要一次初始调用
1 var each = function( ary, callback ){ 2 for (var i = 0; i < ary.length; i++) { 3 callback.call( ary[i], i, ary[i] ); 4 }; 5 } 6 7 // 只进行了这一次调用 8 each( [ 1, 2, 3 ], function( i, n ){ 9 // 进行对数组的操作 10 });
外部迭代器:在外部必须进行显式的迭代
1 // 外部迭代器的实现,具体的客户操作这里就不写了 2 var iterator = function( ary ){ 3 var current = 0; 4 5 var next = function(){ 6 current++; 7 }; 8 9 var isDone = function(){ 10 return current >= ary.length; 11 }; 12 13 var getCurrent = function(){ 14 return ary[ current ]; 15 }; 16 17 // 由于这里产生了闭包,所以返回的对象方法依然可以访问到ary 18 return { 19 next : next, 20 isDone : isDone, 21 getCurrent : getCurrent 22 } 23 }
中止迭代器:给回调器设置callback函数返回false时跳出循环
迭代器的应用举例:文件上传有多种方式的时候,如果避免使用条件选择语句来选择上传方式
解决方案大概为:
- 将每个上传方式都写成一个函数,函数返回upload对象,同时如果是不兼容的上传方式的话就返回false
- 将所有上传方式的函数作为一个数组进行迭代,直到迭代到某个上传方式是可以的
- 使用这个上传方式函数返回的对象进行上传
时间: 2024-10-18 21:44:01