ここでいくつかの有用な情報を見つけましbind
た:
http://dmitrysoshnikov.com/notes/note-1-ecmascript-bound-functions/
bind
ECMAScript 5で指定されているように、一種の軽量関数を生成します(上記のリンクで説明されているように、通常の関数とはいくつかの点で異なります。基本的に、ターゲット関数を呼び出すためのラッパーを提供し、ターゲット関数を含む内部プロパティを維持しますbound this
、およびバインドされた引数. これらは内部プロパティであるため、OP が求めている方法ではアクセスできません (任意のバインドされた関数f
を取得して、 のようなことを行うことはできませんf.getBoundThis()
)。
bind は、特定の状態をキャプチャする際に一意ではないことに注意してください。クロージャは状態もキャプチャします。ただし、bind
(ECMAScript 5 で指定されているように) はクロージャーではありません。クロージャーは変数をキャプチャするのに対し、バインドは値をキャプチャするためです。
次に例を示します。
(function () {
var x = 2;
function thisSquared() { return this * this; }
f = thisSquared.bind(x);
g = function() { return x * x; } // g is a closure
console.log(f()); // Squares the captured value (2), prints 4
console.log(g()); // Squares x, prints 4
x = 3;
})();
console.log(f()); // Squares the captured value (still 2), prints 4
console.log(g()); // Squares x, prints 9
の一部の以前の実装bind
(ECMAScript 5 より前に JavaScript で作成されたもの) には、クロージャーとのこの区別がありませんでした。