javascript this 관련 총화
this 는 변수 대상 (variable object) 의 속성 이 아 닌 상하 문 (execution context) 을 실행 하 는 속성 입 니 다.현재 실행 컨 텍스트 에 들 어가 면 this 값 이 확 정 됩 니 다.this 는 식별 자 분석 과정 에 참여 하지 않 습 니 다. (도 메 인 체인 에서 찾 지 않 습 니 다) 값 은 실행 컨 텍스트 에서 직접 가 져 옵 니 다.
this 의 값 은 함수 호출 방식 과 밀접 한 관 계 를 가진다.
방법 호출 모드
함수 가 대상 이 되 는 방법 (method) 이 호출 될 때 this 는 이 대상 에 연 결 됩 니 다.
var obj={
name:'test',
fun:function(){
console.log(this.name) //test
}
}
obj.fun()
obj['fun']()
함수 호출 모드
함수 가 대상 의 속성 이 호출 되 지 않 았 을 때 this 는 전역 대상 (엄격 한 모드 에서 this 값 은 undefined) 을 가리 키 며 브 라 우 저 에서 window 입 니 다.
function fun1 () {
console.log(this)//Window
function fun2() {
console.log(this)//Window
}
fun2()
}
fun1()
구조 기 호출 모드
구조 함 수 는 new 호출 을 사용 합 니 다. 호출 할 때 뒤에서 이 함수 prototypes 속성 에 연 결 된 새로운 대상 을 만 들 고 this 도 이 대상 에 연 결 됩 니 다.구조 함수 반환 값 이 대상 (primitive value, 또는 반환 값 이 명확 하 게 지정 되 지 않 았 음) 이 아니라면 this 를 되 돌려 줍 니 다.
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.toString = function () {
return '(' + this.x + ', ' + this.y + ')';
};
var p = new Point(1, 2);
apply call bind 모드
call () 과 apply ()
callapply 는 함수 가 상하 문 에서 this 를 실행 하 는 방향 을 바 꿀 수 있 습 니 다.어떤 방법 이 대상 에 존재 하지 않 을 때 콜 이나 apply 를 통 해 이 방법 을 호출 할 수 있 습 니 다.
비슷 하기 때문에 많은 상황 에서 두 가 지 를 사용 할 수 있 습 니 다. 예 를 들 어 전통 적 인 계승 기법 에서 부모 구조 함 수 를 호출 할 수 있 습 니 다.
call () 과 apply () 의 차 이 는:
4. 567917. 콜 을 빌려 특정한 방법 을 호출 할 때 이 방법의 매개 변 수 는 콜 의 첫 번 째 다음 매개 변 수 를 통 해 여러 매개 변수의 목록 형식 으로 전 달 됩 니 다
4. 567917. apply 를 빌려 특정한 방법 을 호출 할 때 이 방법의 매개 변 수 는 call 의 두 번 째 매개 변 수 를 통 해 여러 개의 매개 변 수 를 포함 하 는 배열 이나 배열 대상 의 형식 으로 전 달 됩 니 다
이 점 이 다 르 기 때문에 아래 의 상황 은 apply () 를 사용 하면 매우 적합 하지만, call () 을 사용 하면 적합 하지 않다.
var numbers = [1, 2, 3, 4 ];
var max = Math.max.apply(Math, numbers); //4
var max = Math.max.call(Math,1, 2, 3, 4); //4 。
bind()
bid () 방법 은 바 인 딩 함수 라 는 새로운 함 수 를 만 들 것 입 니 다. 이 바 인 딩 함 수 를 호출 할 때 바 인 딩 함 수 는 이 를 만 들 때 bid () 방법 에 들 어 가 는 첫 번 째 매개 변 수 를 this 로 하고 bid () 방법의 두 번 째 및 이후 매개 변수 에 바 인 딩 함수 가 실 행 될 때 자체 의 매개 변 수 는 순서대로 원 함수 의 매개 변수 로 원 함 수 를 호출 합 니 다.
bid 와 다른 두 가지 중요 한 차이 점 이 있 습 니 다. bid 는 함수 정의 단계 에서 함 수 를 지정 하여 문맥 을 실행 하 는 this 지향 입 니 다. 바 인 딩 후 바로 호출 되 지 않 습 니 다.bid call 과 apply 에 대해 서 는 총 결 상세 한 이 야 기 를 한 편 더 써 야 합 니 다.
ES6 화살표 함수 의 this
화살표 함수 에는 자신의 this 가 아니 라 외층 의 this 를 참조 합 니 다.그 렇 기 때문에 react 에서 이렇게 사용 할 수 있 습 니 다.
//constructor “ ”(=>) handle 。 this 。
constructor(props) {
super(props);
this.state = {
}
this.cancelDelete = () => {
const hid = this.props.host.hid;
this.props.actions.cancelDelete(hid)
}
this.confirmDelete = () => {
const hid = this.props.host.hid;
this.props.actions.confirmDelete(hid)
}
}
// render , this 。
render(){
return(
)
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.