this는 함수 내에서 함수 호출 맥락(context)를 의미한다.
맥락이라는 것은 상황에 따라서 달라진다는 의미인데
즉 함수를 어떻게 호출하느냐에 따라서 this가 가리키는 대상이 달라진다는 뜻이다.
함수와 객체의 관계가 느슨한 자바스크립트에서 this는 이 둘을 연결시켜주는 실질적인 연결점의 역할을 한다.
function func() {
if (window === this) {
console.log("window === this");
}
}
func();
// window === this
여기서 this는 전역객체인 window와 같다.
var o = {
func: function () {
if (o === this) { //this와 객체인 o가 같은지
document.write("o === this");
}
},
};
o.func();
//o === this
var funcThis = null;
function Func() {
funcThis = this;
}
var o1 = Func();
console.log(o1); //undefined
if (funcThis === window) {
document.write("window <br />");
}
var o2 = new Func();
console.log(o2); //Func {}
if (funcThis === o2) {
document.write("o2 <br />");
}
만약 Func() 안에서 if(o2 === this)
를 하면 o 객체가 생성되기 이전이므로 false다
var o = {}
var p = {}
function func(){
switch(this){
case o:
document.write('o<br />');
break;
case p:
document.write('p<br />');
break;
case window:
document.write('window<br />');
break;
}
}
func(); //this => window
func.apply(o); //this => o를 가리킴
func.apply(p); //this => p를 가리킴
this는 소속 객체를 가리킨다