JavaScript - this
in JS
- 전역공간에서 window/global. 전역 객체를 가리킨다.
- 함수 내부에서 window/global. 전역 객체를 가리킨다. 디폴트는 전역인데 바뀔수는 있음
- 메소드 호출시 메소드 호출 주체(메소드명 앞). 함수는 전역객체의 메소드라고 생각하면 편하다.
메소드 안에서의 this.
var a= 10;
var obj = {
a:20,
b: function(){
console.log(this.a); //20
//1.
function c(){
console.log(this.a); //10. c가 함수이기 떄문이다.
}
c();
//2.
var self = this;
function c(){
console.log(self.a); //20
}
c();
}
}
obj.b();
- callback에서 기본적으로는 함수내부에서와 동일
function a(x,y,z){
console.log(this, x, y, z)
}
var b = {
c: 'eee'
};
//1. 즉시호출
a.call(b, 1, 2, 3);
a.apply(b, [1,2,3]);
//2.새로운 함수 생성(currying)
var c = a.bind(b);
c(1,2,3);
var d = a.bind(b, 1, 2); //a를 가지고 새로운 함수를 만들거다.
d(3)
var callback = function(){
console.dir(this); //window
};
var obj = {
a: 1,
b: function(cb){
cb();
}
};
obj.b(callback);
var callback = function(){
console.dir(this); //obj
};
var obj = {
a: 1,
b: function(cb){
cb.call(this);
}
};
obj.b(callback);
모두 다 결과는 Object{c:”eee”} 1 2 3 이다.
모두 첫번째 인자를 this로 하겠다는 규칙이 있다.
기본적으로는 함수의 this와 같다.
제어권을 가진 함수가 callback의 this를 명시한 경우는 그에 따르지만 개발자가 this를 바인딩한 채로 callback을 넘기면 그에 따른다.
- 생성자함수에서 인스턴스