次のコードでは、最初の関数は にバインドされていませんobjが、2 番目の関数はバインドされているため、期待どおりにf()戻りfifi、g()戻りますMark Twain。しかし、3回目の試行では、最初に関数になり、次に呼び出されます。基本的にはケース(obj.getCallBack)と同じです。fただし、Mark Twain代わりに印刷されます。objを使用することにバインドされていないのに、 を指してbind()実行されるのはなぜですか? thisobj
(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());