2017-11-21 17 views
0

나는 내 브라우저 콘솔에서이 코드 작은 부분을 실행하려고 (5)를 실행합니다. 그건 제 게터가 부르지 않는다는 것을 의미합니다. 나는 그것이 a.b를 직접 호출하지 않고 대신에 C 변수를 사용하기 때문에 그럴 것이라고 생각한다. 누군가 내 생각을 확인/거부 할 수 있습니까? 또한 내가 'c'라고 부를 때마다 어떻게 getter에게 전화를 걸 수 있습니까?자바 스크립트 객체 게터

감사합니다.

+0

'a.b'가'c'에 지정되어 있습니다. 그 때 당신의 getter가 호출됩니다. 그리고 일단 get 값이'c'에 할당됩니다. 'c'는 다른 변수처럼 동작합니다. –

답변

2

사람은 내 생각

당신이 a.b를 호출 할 때 당신은 console.log(5) 실행할 때마다 얻을 것이다/확인 거부 할 수 있습니다. 그러나 c = a.b을 사용하면 getter 함수가 실행되고 결과는 인 c에 복사되며 여기에서 시작하여 ca.b을 통해 반환되는 독립 값을가집니다. 따라서이 때마다 c으로 전화하면 c으로 평가되고 그 값은 a.b이 아닙니다. 약간의 말로 c은 더 이상 a.b으로 아무것도 없습니다.

어떻게하면 'c'를 호출 할 때마다 getter를 호출 할 수 있습니까?

실제로 해결책이 없습니다. 한 가지 할 수있는 것은 결과를 기록하는 함수를 반환하는 것이지만, 이제는 작동 시키려면 c을 호출해야합니다. 아마 어딘가에서 로직을 변경할 수 있기 때문에 좋은 해결책은 아닙니다.

const a = {b: 1} 
 
Object.defineProperty(a, 'b', { get: function() { 
 
     console.log(5); 
 
     return() => console.log(5); 
 
    } 
 
}); 
 
const c = a.b; 
 
c(); 
 
c();

0

당신은 한 번만 getb을하고 있으며, c로,이 경우 undefined에, 반환 값을 할당.

그 후에 c으로 작업하면 getter가 더 이상 호출되지 않습니다.