次のコードでは、最初の関数は にバインドされていませんobj
が、2 番目の関数はバインドされているため、期待どおりにf()
戻りfifi
、g()
戻りますMark Twain
。しかし、3回目の試行では、最初に関数になり、次に呼び出されます。基本的にはケース(obj.getCallBack)
と同じです。f
ただし、Mark Twain
代わりに印刷されます。obj
を使用することにバインドされていないのに、 を指してbind()
実行されるのはなぜですか? this
obj
(4 回目の試行はメソッドの通常の呼び出しでthis
あり、メソッドが呼び出されるオブジェクトにバインドする必要があります)。
(現在の Chrome、Firefox、および IE 9 でテスト済み)
window.name = "fifi";
var obj = {
name: "Mark Twain",
getCallBack: function() {
return this.name;
}
}
var f = obj.getCallBack;
var g = f.bind(obj);
console.log(f);
console.log(f());
console.log(g);
console.log(g());
console.log((obj.getCallBack)());
console.log(obj.getCallBack());