# 迭代器模式
迭代器模式中,迭代器(允許我們遍歷集合中所有元素的對象)順序迭代一個集合對象中的元素而無需暴漏其底層形式。
迭代器封裝了這種特別的迭代操作的內部結構,就jQuery的jQuery.fn.each()迭代器來說,我們實際上可以使用jQuery.each()底層的代碼來迭代一個集合,而無需知道或者理解后臺提供這種功能的代碼是如何實現的。
這種模式可以被理解為門面模式的一種特例,在這里我們只處理與迭代有關的問題。
~~~
$.each( ["john","dave","rick","julian"] , function( index, value ) {
console.log( index + ": "" + value);
});
$( "li" ).each( function ( index ) {
console.log( index + ": " + $( this ).text());
});
~~~
這里我們可以看到jQuery.fn.each()的代碼:
~~~
// Execute a callback for every element in the matched set.
each: function( callback, args ) {
return jQuery.each( this, callback, args );
}
~~~
在jQuery.each()方法后面的代碼提供了兩種迭代對象的方法:
~~~
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction( object );
if ( args ) {
if ( isObj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.apply( object[ i++ ], args ) === false ) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
break;
}
}
}
}
return object;
};
~~~
- 前言
- 簡介
- 什么是設計模式?
- 設計模式的結構
- 編寫設計模式
- 反模式
- 設計模式的分類
- 設計模式分類概覽表
- JavaScript 設計模式
- 構造器模式
- 模塊化模式
- 暴露模塊模式
- 單例模式
- 觀察者模式
- 中介者模式
- 原型模式
- 命令模式
- 外觀模式
- 工廠模式
- Mixin 模式
- 裝飾模式
- 亨元(Flyweight)模式
- JavaScript MV* 模式
- MVC 模式
- MVP 模式
- MVVM 模式
- 最新的模塊化 JavaScript 設計模式
- AMD
- CommonJS
- ES Harmony
- JQuery 中的設計模式
- 組合模式
- 適配器模式
- 外觀模式
- 觀察者模式
- 迭代器模式
- 惰性初始模式
- 代理模式
- 建造者模式
- jQuery 插件的設計模式
- JavaScript 命名空間模式
- 總結
- 參考