[javascript] Javascript에서 자주나오는 'this'란 뭘까
Javascript 'this'
this의 값은 함수를 호출하는 방법에 의해 결정된다.
클로저는 선언되는 위치에 의해 달라진다.
this는 누가 호출했느냐가 this가 된다.
즉 "호출한객체가 this이다."
예제를 보면
const a = {
name : 'code',
who : function(){
console.log(this);
}
}
a.who(); 를 호출하면
who function안의 console.log(this)가 실행되고
여기서의 this는 a가 who()를 호출한것이 되므로
const a 객체 본인이된다.
그럼 코드를 변형시켜서
let b = a.who; 즉 a객체의 who함수를 변수 b에 할당하고
b를 실행해보자
b();
그럼 b()는 a.who이고 a.who() 가 실행되면 console.log(this)가 실행되는거고
여기서의 this는 b()를 호출한 'window' 가 된다
bind를 사용해서 this를 예외적으로 고정시켜보자
let bindedC = b.bind(a);
이렇게되면 b의 this는 무조건 a가된다.
bindedC()를 호출하면 ?? b()가실행되고 b()내부의 a.who가 실행되고 최종적으로 a.who의 console.log(this)가 실행되는데
여기서의 this는 b.bind(a)를 했으므로 무조건 a가된다.
즉 console.log의 결과로 a객체가 나온다.
전역컨텍스트에서 this는 window 객체이다.
'use strict'는 엄격모드이다.
객체 메서드에서 this는 함수를 호출한 객체인 Object본인이다.
this가 객체 밖에서 정의되었던 안에서 정의되었던
this가 호출된 그 시점의 객체가 this가 된다.
.바로 왼쪽의 객체가 this
예를들어
fucntion main() {
console.log(this);
}
const object = {
name : '나',
smallObject : {
name : '너',
main
},
};
이렇게 선언되어있을때
object.smallObject.main()을 호출하면??
main()내부 console.log(this)가 실행되고 .main() 왼쪽의 smallObject가 this가된다.
이벤트 처리기 에서의 this는 event.target이다.