도입부 Iterator

5359 단어 jses6
스 트 리밍 기 (Iterator) 는 바로 이러한 메커니즘 이다.그것 은 다양한 데이터 구조 에 통 일 된 접근 체 제 를 제공 하 는 인터페이스 이다.모든 데이터 구 조 는 Iterator 인 터 페 이 스 를 배치 하면 옮 겨 다 니 기 작업 을 완성 할 수 있 습 니 다 (즉, 이 데이터 구 조 를 순서대로 처리 하 는 모든 구성원).
Iterator 의 역할 은 세 가지 가 있 습 니 다. 하 나 는 각종 데이터 구 조 를 위해 통일 적 이 고 간편 한 방문 인 터 페 이 스 를 제공 하 는 것 입 니 다.둘째, 데이터 구조의 구성원 들 이 특정한 순서에 따라 배열 할 수 있 도록 하 는 것 이다.셋째, ES6 는 새로운 옮 겨 다 니 는 명령 for... of 순환 을 만 들 었 고 Iterator 인 터 페 이 스 는 주로 for... of 소 비 를 제공 합 니 다.
Iterator 의 옮 겨 다 니 는 과정 은 이 렇 습 니 다.
(1) 현재 데이터 구조의 시작 위 치 를 가리 키 는 포인터 대상 을 만 듭 니 다.즉, 스 트 리밍 대상 은 본질 적 으로 지침 대상 이다.
(2) 포인터 대상 을 처음 호출 하 는 next 방법 은 데이터 구조의 첫 번 째 구성원 에 게 지침 을 가리 킬 수 있다.
(3) 두 번 째 포인터 대상 을 호출 하 는 next 방법 은 데이터 구조의 두 번 째 구성원 을 가리킨다.
(4) 데이터 구조의 끝 위 치 를 가리 킬 때 까지 포인터 대상 의 next 방법 을 계속 호출 합 니 다.
매번 next 방법 을 호출 할 때마다 데이터 구조의 현재 구성원 의 정 보 를 되 돌려 줍 니 다.구체 적 으로 말 하면 value 와 done 두 속성 을 포함 하 는 대상 을 되 돌려 주 는 것 이다.그 중에서 value 속성 은 현재 구성원 의 값 입 니 다. done 속성 은 불 값 입 니 다. 옮 겨 다 니 는 것 이 끝 났 는 지 여 부 를 표시 합 니 다.
ES6 에 따 르 면 기본 Iterator 인 터 페 이 스 는 데이터 구조의 Symbol. iterator 속성 에 배치 되 어 있 으 며, Symbol. iterator 방법 이 스 트 리밍 기 생 성 함수 가 아 닌 경우 오류 가 발생 할 수 있 습 니 다.
원생 Iterator 인 터 페 이 스 를 갖 춘 데이터 구 조 는 다음 과 같다.Array Map Set String TypedArray 함수 의 arguments 대상 NodeList 대상
우 리 는 배열 의 Symbol. iterator 속성 을 클래스 배열 에 부여 하고 확장 연산 자 를 사용 하여 클래스 배열 을 바 꿀 수 있 습 니 다.
Iterator 인터페이스 구현
Object.defineProperty(myObject, Symbol.iterator, {
    enumerable: false,
    writable:false,
    configurable:false,
    value:function(){
        let o = this;
        let idx = 0;
        let ks = Object.keys(o);
        return {
            next:function(){
                return {
                    value:o[ks[idx++]],
                    done:(idx>ks.length)
                }
            }
        }
    }
});

사실 더 간단 하고 거 친 실현 방식 도 있 습 니 다. Generator 함수 로
let myIterable = {
  [Symbol.iterator]: function* () {
    yield 1; //        
    yield 2;
    yield 3;
  }
}
[...myIterable] // [1, 2, 3]

옮 겨 다 니 는 next 방법 이 가장 중요 하지만 return 과 throw 방법 이 있 습 니 다. return 방법의 사용 장 소 는 for.. of 순환 이 앞 당 겨 종료 되면 return 방법 을 사용 합 니 다.대상 이 옮 겨 다 니 기 전에 자원 을 정리 하거나 방출 해 야 한다 면 return 방법 을 배치 할 수 있 습 니 다.
function readLinesSync(file) {
  return {
    [Symbol.iterator]() {
      return {
        next() {
          return { done: false };
        },
        return() {
          file.close();
          return { done: true };
        }
      };
    },
  };
}
//  return
//returnfor (let line of readLinesSync(fileName)) {
  console.log(line);
  break;
}

//returnfor (let line of readLinesSync(fileName)) {
  console.log(line);
  continue;
}

//          returnfor (let line of readLinesSync(fileName)) {
  console.log(line);
  throw new Error();
}

ES6 의 배열, Set, Map 은 모두 다음 과 같은 세 가지 방법 을 배 치 했 습 니 다. 호출 후 모두 스 트 리밍 대상 (Object. keys 등 은 그들 과 달리 배열) entries () 는 스 트 리밍 대상 을 되 돌려 주 고 [키 이름, 키 값] 으로 구 성 된 배열 을 옮 겨 다 닙 니 다.keys () 는 모든 키 이름 을 옮 겨 다 니 는 데 사용 할 스 트 리밍 대상 을 되 돌려 줍 니 다.values () 는 모든 키 값 을 옮 겨 다 니 는 데 사용 할 옮 겨 다 니 는 대상 을 되 돌려 줍 니 다.

좋은 웹페이지 즐겨찾기