다음 예 에서이 키워드 의 예상치 못한 값을 찾았습니다 .
let x = {
z : 10 ,
get func1() {
return function(v) {
console.log(this === v);
}
}
}
x.func1(x)
의 값 이 키워드는 객체입니다 X 가 그 객체에서 실행되는 것처럼 내가에만 기대 get 함수 가 이 키워드는 호출 객체에 동일 X
이 예는 우리에게 차이점을 보여줍니다
let x = {
func2() {
return function(v) {
console.log(this === v);
}
}
}
x.func2()(x);
두 예제 에서 getter 함수 인 func1 과 객체의 메소드 인 func2 가 객체 x 에서 실행 된 다음 반환 된 함수가 실행됩니다. 왜 이 첫 번째 예에서 값이 아닌 전역 객체가 아닌 객체에 동일 X .
답변
즉 A의 매우 흥미로운 질문입니다.
속성 액세스 결과 즉시 함수가 호출되기 때문입니다. 따라서 이들은 기본적으로 동일합니다.
let x = {
get func1() {
return function(v) {
console.log(this === v);
};
},
func2(v) {
console.log(this === v);
}
};
x.func1(x);
x.func2(x);
두 경우 모두 :
- 특성 값을 읽고 함수 참조를 생성합니다.
- 이 함수는 동일한 속성 액세스 식의 일부로 실행됩니다.
func1
접근 자 속성이고 func2
데이터 속성 이라는 사실 은 중요하지 않습니다. 속성을 읽은 결과 값이 어떻게 사용되는지가 중요합니다.