停了好久的每两周一个设计的设计模式的计划再次开始了。。。这次讲的是迭代器模式。
一、什么是迭代器模式
迭代器模式是指提供一种方法顺序访问一个集合中的各个元素,而又不需关心该集合的内部构造的方式。
二、实现简单的迭代器
我们经常使用到jQuery中的$.each()工具方法,以及ES5中Array.prototype.forEach()方法都是使用的迭代器模式。
现在我们自己来实现一个迭代器:
function each (arr,fn) { var i = 0,len = arr.length; for (; i < len; ++i) { fn(i,arr[i]); } }
测试一下:
each([1,2,3,4],function (index,value) { console.log(index,value); });
一个简单的迭代器就实现了。
三、对象字面量迭代器
迭代器模式不仅可以迭代数组,而且可以迭代一些类数组的对象。JS中可以使用for in 循环迭代字面量对象。
我们看下jQuery中提供的each()方法:
each: function( obj,callback) { var value,i = 0,length = obj.length,isArray = isArraylike( obj ); if ( args ) { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.apply( obj[ i ],args ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.apply( obj[ i ],args ); if ( value === false ) { break; } } } } return obj; }
其中还通过
if ( value === false ) { break; }
这种方式使迭代器能够像for循环中的brea一样跳出循环。
四、总结
迭代器模式是一种相对较为简单的模式,而且目前大多数语言已经内置了迭代器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。