1. new
를 사용했을 때 해당 객체로 바인딩됨
var name = "global";
function Func() {
this.name = "Func";
this.print = function f() { console.log(this.name); };
}
var a = new Func();
a.print(); // Func
2. 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
call, bind, apply
세가지 함수는 this의 값이 어떤 값이 사용되야하는지 명확할때 사용하는 방식이다.
3. 객체의 메소드로 호출할 경우 해당 객체에 바인딩된다.
var obj = {
name: 'obj name',
print: function p() { console.log(this.name); }
};
obj.print(); // obj name
4. strict mode
undefined
로 초기화된다.
5. 일반
window
객체에 바인딩된다.