2016-07-20 2 views
0
for(var scope = env; scope; scope = Object.getPrototypeOf(scope)){ 
    if(Object.prototype.hasOwnProperty.call(scope, name)){ 
     scope[name] = value; 
     return value; 
    } 
    throw new ReferenceError("Setting undefined object " + name); 
    } 

env 객체는 프로그램의 전역 범위 객체입니다. name은 이전에 선언되었는지 여부를 찾기 위해 사용하는 객체이며 value은 범위에서 선언 된 것으로 확인 된 객체에 할당 된 name 객체의 값입니다. 그렇지 않으면 오류가 발생합니다. for 루프에서 무슨 일이 일어나는지에 대한 설명을 얻을 수 있습니까?선언 된 객체가 자바 스크립트 프로그램의 현재 범위에 있는지 확인합니다.

+0

프로토 타입 체인을 걷습니다. 그 발췌 문장은 어디에서 가져 왔습니까? 출처를 언급하고 저자의 취향을 밝힙니다. – Bergi

+0

@Bergi 나는 Marijn Haverbeke가 쓴 Eloquent Javascript 책을 읽고있다. –

+0

구체적으로 어떤 장? 우리는 당신에게 좀 더 많은 맥락을 줄 수있을 것입니다. – Bergi

답변

0

여기서 scope은 env의 프로토 타입 체인에있는 특정 개체를 나타냅니다.

for 루프는 프로토 타입 체인을 따라 올라가서 속성이 설정되어있는 실제 개체를 확인하여 체인에서 대체 할 수 있도록합니다 (체인에서 아래쪽에 우선 적용하지 않고).

속성이 설정된 프로토 타입 체인에서 개체를 찾을 수없는 경우 오류가 발생합니다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

+0

자원을 내 주셔서 감사합니다 –

+0

'객체의 속성에 액세스하려고하면 속성은 객체에서 찾을 수있을뿐만 아니라 객체의 프로토 타입, 프로토 타입의 프로토 타입 등에서 찾을 수 있습니다. 일치하는 이름이 발견되거나 프로토 타입 체인의 끝 부분에 도달합니다. "- 이것은 내 문제를 해결합니다 @chardy –

관련 문제