関数は何にもアタッチされていませんが、実行時に何らかのオブジェクトにバインドされているコンテキストでアタッチされます (未定義になる場合があるthis
ES5 の厳密モードを除く)。this
どのオブジェクトthis
が参照されるかは、関数がオブジェクトのメンバーとしての場合、関数の呼び出し方法、または や などの関数が使用されているかどうかによって決まりcall
ますapply
。
var obj = {
x: 20,
fn: function() {
console.log(this.x);
}
};
obj.fn(); // prints 20 as `this` will now point to the object `obj`
var x = 10;
var fn = obj.fn;
fn(); // prints 10 as `this` will now point to the global context, since we're invoking the function directly
var newObj = {
x: 30
};
fn.call(newObj); // prints 30 as `this` points to newObj
fn.apply(newObj); // same as the above, but takes an the functions arguments as an array instead of individual arguments