迭代器模式是指提供一種方法順序訪問一個聚合對象的各個對象中的各個元素蒋纬,而又不需要暴露該對象的內(nèi)部表示源梭。迭代器模式可以把迭代的過程從業(yè)務(wù)邏輯分離出來铺呵,在使用迭代器模式模式之后,即使不關(guān)心對象的內(nèi)部構(gòu)造颖变,也可以按順序訪問其中的每一個元素生均。
jQuery中的迭代器
$.each([1,2,3],function(i, n) {
console.log('當(dāng)前下標(biāo)為:' + i);
console.log('當(dāng)前值為:' + n);
});-
手動實現(xiàn)一個迭代器----each函數(shù)
var each = function(ary, callback) {
for(var i= 0, l= ary.length; i< l; i++) {
callback.call(ary[i], i, ary[i]);
}
};each([1,2,3], function(i, n) { alert([i,n]); })
-
外部迭代器
var Iterator = function(obj) {
var current = 0;var next = function() { current +=1; }; var isDone = function() { return current >= obj.length; }; var getCurrItem = function() { return obj[current]; }; return { next: next, isDone: isDone, getCurrItem: getCurrItem } }; var compare = function(iterator1, iterator2) { while(!iterator1.isDone() && !iterator2.isDone()) { if(iterator1.getCurrItem() !== iterator2.getCurrItem()) { throw new Error('iterator1 和 iterator2 不相等'); } iterator1.next(); iterator2.next(); } alert('iterator1 和 iterator2相等') } var iterator1 = Iterator([1,2,3]); var iterator2 = Iterator([1,2,3]); compare(iterator1,iterator2); //terator1 和 iterator2相等