JS this바인딩 우선순위
Updated:
this의 바인딩
EC(Execution Context)가 생성될때 마다 this의 바인딩이 일어나며 우선순위순으로 나열해보면 다음과 같다.
- new 를 사용했을 때 해당 객체로 바인딩된다.
var name = 'global';
function Func() {
this.name = 'Func';
this.print = function f() { console.log(this.name);}
}
var a = new Func();
a.print(); //Func
- call, apply , bind 와 같은 명시적 바인딩을 사용했을 때 인자로 전달된 객체에 바인딩된다.
function func() {
console.log(this.name);
}
var obj = { name: 'obj name' };
func.call(obj); // obj name
func.apply(obj); // obj name
(func.bind(obj))(); // obj name
- 객체의 메소드로 호출할 경우 해당 객체에 바인딩된다.
var obj = {
name : 'obj name',
print: function p() { console.log(this.name);}
};
obj.print(); // obj name
- 그 외의 경우
- strict mode :
undefiend
로 초기화된다. - 일반 : 브라우저라면
window
객체에 바인딩 된다.
출처 :
Leave a comment