javascript 언어 확장: 대상 교체 가능 (1)

2995 단어
ECMAScript 에서 우 리 는 for in 문 구 를 통 해 대상 속성 을 옮 겨 다 닐 수 있다 는 것 을 알 고 있 습 니 다. 물론 이 속성 들 은 계승 한 속성 을 포함 하지 않 습 니 다.
var ary = [1,2,3,"aa",4];
for(i in ary)
    console.log(i); //      

fireforx 및 기타 브 라 우 저 에서 실 현 된 js 언어 확장 에 each 문 구 를 추 가 했 습 니 다. each 는 in 과 유사 하지만 대상 의 속성 값 을 옮 겨 다 니 고 있 습 니 다.
var a = [1,2,3,4];
for each(v in a)
    console.log(v); //      

js 확장 에 있어 서 더욱 통용 되 는 교체 가능 한 대상 도 있 습 니 다. in 과 each 문 구 는 모든 교체 가능 한 대상 에 응용 할 수 있 습 니 다.교체 가능 대상 이란 '다음' 값 을 생 성 할 수 있 는 대상 으로 다음 과 같은 두 가지 기본 조건 을 만족 시 켜 야 한다. 1. 함수 의 를 포함해 야 한다.iterator__속성;2. 이 함 수 는 대상 을 되 돌려 야 합 니 다. 이 대상 은 다음 값 을 만 드 는 next 함수 속성 이 있어 야 합 니 다.일반적으로 우 리 는 이 대상 을 교체 기 대상 이 라 고 부른다.만약 당신 의 목적 이 유한 한 교체 기 를 만 드 는 것 이 라면 (죽은 순환 을 옮 겨 다 니 고 싶 지 않 으 시 죠?) 마지막 으로 교체 할 때 StopIteration 이상 을 던 져 야 합 니 다.이 이상 은 대상 일 뿐 구조 기 함수 가 아니 므 로 new 로 만 들 필요 가 없습니다.each 나 in 구문 내부 에서 이 이상 을 자동 으로 처리 할 수 있 기 때문에 교체 기 에서 뛰 어 나 기 위해 catch 를 직접 쓸 필요 가 없습니다.우 리 는 다음 함수 의 패 키 지 를 이용 하여 교체 가능 한 대상 을 함수 에 밀봉 합 니 다.
function get_itor(start,end){
  return{
    __iterator__:function(){
      return {
        next:function(){
            if(start>end) throw StopIteration;
            return start++;
        }
      };
    }
  };
}

다음 은 각각 in 과 each 로 교체 가능 한 대상 을 교체 합 니 다.
var itor = get_itor(1,10);
for(i in itor)
    console.log(i); //   
for each(v in itor)
    console.log(v); //       

좋은 웹페이지 즐겨찾기