apply
および は(関数のコンテキスト)call
を設定する類似の関数であることは既に知っています。this
違いは引数の送信方法にあります(手動 vs 配列)
質問:
しかし、このbind()
方法はいつ使用すればよいのでしょうか?
var obj = {
x: 81,
getX: function() {
return this.x;
}
};
alert(obj.getX.bind(obj)());
alert(obj.getX.call(obj));
alert(obj.getX.apply(obj));
ベストアンサー1
.bind()
関数を後で特定のコンテキストで呼び出す必要がある場合、イベントで役立ちます。関数をすぐに呼び出してコンテキストを変更する場合は、.call()
またはを使用します。.apply()
Call/apply は関数をすぐに呼び出しますが、bind
後で実行されたときに元の関数を呼び出すための正しいコンテキストが設定された関数を返します。この方法では、非同期コールバックとイベントでコンテキストを維持できます。
私はよくこれをやります:
function MyObject(element) {
this.elm = element;
element.addEventListener('click', this.onClick.bind(this), false);
};
MyObject.prototype.onClick = function(e) {
var t=this; //do something with [t]...
//without bind the context of this function wouldn't be a MyObject
//instance as you would normally expect.
};
私は、メンバー メソッドを渡す必要があるが、コンテキストは非同期アクションを開始したインスタンスにしたい非同期コールバックのために、Node.js でこれを広く使用しています。
bind の単純で素朴な実装は次のようになります。
Function.prototype.bind = function(ctx) {
var fn = this;
return function() {
fn.apply(ctx, arguments);
};
};
他にもいろいろありますが(他の引数を渡すなど)、詳しく読んで実際の実装を確認してください。MDNで。