js設計模式 迭代模式

2022-05-07 11:33:08 字數 1488 閱讀 2989

迭代器模式是指提供一種方法順序訪問乙個聚合物件的各個元素,而又不需要暴露該物件的內部表示。

實現jq中的each迭代器

$.each( [1, 2, 3], function

( i, n ));

//

內部迭代

var each=function

(arr,callback)

}each([1,2,3,4],function

(i,v))

這裡是將傳入的陣列通過for迴圈來實現的迭代。

需要注意的點是,既然可以順序訪問元素,那麼也可以通過倒序來訪問元素。

還需要注意,可以加上乙個中止程式,來中止迭代

這裡還涉及到了內部迭代。**內部迭代時內部已經定義好了迭代規則,完全接手整個迭代過程,外部只需要一次呼叫,呼叫時外界不需要關係迭代器內部實現**。這是內部迭代器的優點也是它的缺點。由於內部迭代器的迭代規則已經被提前定義好了,如果我們想要同時迭代兩個陣列,可能就要深入到each的**函式中了。

var compare = function

( ary1, ary2 )

each( ary1,

function

( i, n )

});

alert ( 'ary1 和 ary2 相等');

}; compare( [ 1, 2, 3 ], [ 1, 2, 4 ] ); //

throw new error ( 'ary1 和 ary2 不相等' );

外部迭代器不許顯示的請求迭代下乙個元素。

var iterator=function

(obj)

var isdone=function

()var getcurrentitem=function

()return

}var compare=function

(iterator1,iterator2)

iterator2.next();

iterator1.next();

}alert('相等');

}var iterator1=iterator([1,2,3,4])

var iterator2=iterator([1,2,3,6])

compare(iterator1,iterator2)

外部迭代器的使用比內部迭代器靈活,能滿足的需求也更多。使用內部迭代器還是外部迭代器,還是要視情況而定。

迭代陣列和字面量物件

前面的迭代器都需要length方法,如果我們遍歷字面量物件,可能前面的寫法是不適用的。在js中,for in 可以迭代普通的字面量物件屬性,

可以在each函式中新增上乙個判斷,如果是陣列,就使用for迴圈,如果是物件,就使用for in。

js設計模式 迭代器模式

一.從乙個例子開始講起 jquery each jquery each jquery each 可以看到的時候上面有三種不同的資料結構,他們都有順序遍歷的需求,但是由於api不同,我們得寫多種遍歷的方式,而迭代器模式就是為了簡化有序集合的遍歷產生的模式 我們可以用jquery的each方法來對上面的...

設計模式 迭代器模式

迭代器模式是屬於物件行為性的模式。首先是定義 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露物件的表示方法。迭代器的結構圖 適用性 1 訪問乙個聚合物件的內容而無需暴露它的內部表示 2 支援聚合物件的多種遍歷 3 為遍歷不同的聚合結構提供乙個統一的介面 支援多型迭代 協作 concretei...

設計模式 迭代器模式

iterator,提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。迭代器模式就是分離了集合物件的遍歷行為,抽象出乙個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部 透明地訪問集合內部的資料。iterator迭代器抽象類 迭代器抽象類 abstract clas...