5
myFunction.call(thisArg, arg1, arg2 ...)

私の理解では、callメソッドを使用して関数thisArgthis値を提供すると、渡すオブジェクトに設定されます。

myFunction.bind(thisArg, arg1, arg2 ...)

一方、bindメソッドは、新しい関数のコンテキストがthis渡されたオブジェクトに設定された新しい関数を返します。

しかし、私が理解していないのは、なぜbinda の代わりに使用するのかということcallです。のコンテキストを変更するだけなら、私には十分thiscall思えます。次に、ブラウザIE8以下で壊れたときにbindを使用するのはなぜですか。

では、どのような場合に比べて使用bindがより良いケースになるのcallでしょうか?

4

1 に答える 1

12

と比べて、使用bindがより良いケースになるのはcallいつですか?

コールバック。

関数が特定のオブジェクトのコンテキストで呼び出されることを確認する必要があるが、関数の呼び出し方法を制御できない場合 (関数をパラメーターとしてコールバックに渡す場合など)、 を使用しますbind

var f,
    example;
f = new Foo();
example = document.getElementById('example');

//`f.bar` is called in the context of `f`
f.bar();

//`f.bar` will be called in the context of `example`
example.addEventListener('click', f.bar); 

//`f.bar` will be called in the context of `f`
example.addEventListener('click', f.bar.bind(f));
于 2013-04-06T20:19:16.710 に答える