소개하다
반복자 모드 : 객체의 내부 표현을 노출시키지 않고 집계 객체에서 개별 요소를 주문하는 방법을 제공합니다.
반복자의 몇 가지 특성은 다음과 같습니다.
1. 내부 표현을 노출시키지 않고 집계 물체의 내용에 액세스하십시오.
2. 다른 수집 구조를 통과하기위한 통합 인터페이스를 제공하여 다른 수집 구조에서 동일한 알고리즘을 지원합니다.
3. 트래 버는 동안 반복자가 위치한 수집 구조를 변경하면 문제가 발생할 수 있습니다 (예 : C#의 Foreach에서 항목을 수정할 수 없습니다).
텍스트
일반적으로 반복하려면 모든 객체를 가로 질러 2 개의 방법 인 hasnext ()와 다음 ()가 있어야합니다. 먼저 예를 들어 봅시다 :
코드 사본은 다음과 같습니다.
var agg = (function () {
var index = 0,
데이터 = [1, 2, 3, 4, 5],
길이 = data.length;
반품 {
다음 : function () {
var 요소;
if (! this.hasnext ()) {
널 리턴;
}
요소 = 데이터 [색인];
색인 = 색인 + 2;
리턴 요소;
},
hasnext : function () {
반환 색인 <길이;
},
되감기 : function () {
색인 = 0;
},
현재 : function () {
반환 데이터 [색인];
}
};
} ());
사용 방법은 C#과 동일합니다.
코드 사본은 다음과 같습니다.
// 반복 결과는 다음과 같습니다. 1, 3, 5
while (agg.hasnext ()) {
console.log (agg.next ());
}
물론 추가 방법을 통해 데이터를 재설정 한 다음 다른 작업을 계속할 수도 있습니다.
코드 사본은 다음과 같습니다.
// 재설정
agg.rewind ();
console.log (agg.current ()); // 1
jQuery 응용 프로그램 예
jQuery의 매우 유명한 반복자는 $ .Each 방법입니다. 각각을 통해 추가 기능을 전달한 다음 모든 항목 항목을 반복 할 수 있습니다.
코드 사본은 다음과 같습니다.
$ .Each ([ 'dudu', 'dudu', 'yogurt little girl', 'that mm'], 기능 (색인, 값) {
console.log (index + ':' + value);
});
//또는
$ ( 'li'). 각 (함수 (인덱스) {
console.log (index + ':' + $ (this) .text ());
});
요약
반복자의 사용 시나리오는 다음과 같습니다. 세트의 결과는 종종 다른 방식으로 다릅니다. 우리는 내부 구조를 노출시키고 싶지 않지만 클라이언트 코드가 요소에 투명하게 액세스 할 수 있도록합니다. 이 경우 반복자 모드를 사용할 수 있습니다.