나는 내 브라우저 콘솔에서이 코드 작은 부분을 실행하려고 (5)를 실행합니다. 그건 제 게터가 부르지 않는다는 것을 의미합니다. 나는 그것이 a.b를 직접 호출하지 않고 대신에 C 변수를 사용하기 때문에 그럴 것이라고 생각한다. 누군가 내 생각을 확인/거부 할 수 있습니까? 또한 내가 'c'라고 부를 때마다 어떻게 getter에게 전화를 걸 수 있습니까?자바 스크립트 객체 게터
감사합니다.
나는 내 브라우저 콘솔에서이 코드 작은 부분을 실행하려고 (5)를 실행합니다. 그건 제 게터가 부르지 않는다는 것을 의미합니다. 나는 그것이 a.b를 직접 호출하지 않고 대신에 C 변수를 사용하기 때문에 그럴 것이라고 생각한다. 누군가 내 생각을 확인/거부 할 수 있습니까? 또한 내가 'c'라고 부를 때마다 어떻게 getter에게 전화를 걸 수 있습니까?자바 스크립트 객체 게터
감사합니다.
사람은 내 생각
당신이 a.b
를 호출 할 때 당신은 console.log(5)
실행할 때마다 얻을 것이다/확인 거부 할 수 있습니다. 그러나 c = a.b
을 사용하면 getter
함수가 실행되고 결과는 인 c
에 복사되며 여기에서 시작하여 c
은 a.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();
당신은 한 번만 get
팅 b
을하고 있으며, c
로,이 경우 undefined
에, 반환 값을 할당.
그 후에 c
으로 작업하면 getter가 더 이상 호출되지 않습니다.
'a.b'가'c'에 지정되어 있습니다. 그 때 당신의 getter가 호출됩니다. 그리고 일단 get 값이'c'에 할당됩니다. 'c'는 다른 변수처럼 동작합니다. –