2016-11-05 1 views
0

다음 코드는 무한 루프 (getter1 번을 인쇄하고 getter2 정지까지) 실행 :두 게터로 인해 무한 루프가 발생 했습니까?

var person1 = { 
    _age: 42, 
    get age() { 
     console.log("getter1"); 
     return this._age; 
    } 
}; 

Object.defineProperty(person1, "_age", { 
    get: function() { 
     console.log("getter2"); 
     return this._age; 
    } 
}); 
console.log(person1.age); // true 

무엇이 원인은 무엇인가? (참고 : 나는 두 개의 다른 getter를 선언했다는 사실을 알고있다.)

+2

두 번째 게터 자체를 얻을 수를 ... – adeneo

답변

1

이것은 무한 루프가 아니지만 무한 재귀입니다. _age에 대한 getter 안에 this._age을 반환하지만 this._age에 액세스하면 암시 적으로 getter가 다시 호출됩니다.

_age이라는 게터를 정의하면 _age (42)의 이전 값을 덮어 씁니다. 더 이상 값이 42 인 속성이 없습니다. 당신은이 같은 속성에 대한 게터 될 수없는 속성 값을 반환하는 게터를 만들 수 있도록 _age이 아닌 당신의 게터 뭔가 이름을 지정할 경우

var person1 = { 
    _age: 42, 
    get age() { 
     console.log("getter1"); 
     return this._age; 
    } 
}; 

Object.defineProperty(person1, "age2", { 
    get: function() { 
     console.log("getter2"); 
     return this._age; 
    } 
}); 
console.log(person1.age); // 42 
console.log(person1.age2); // 42 
0

는 때마다, 당신은

0

첫 번째 게터는이 this._get 요청 번째 게터를 트리거 this._get 요청 번째 게터를 트리거 this._get를 요청하는 다른 게터을 발사 게터에서 값을 반환 방아쇠를 당기는 ... 당신은 요점을 얻습니다.

관련 문제