Javascriptのapply、call、bindを深く浅くする

4487 ワード

apply、callの違い
apply,callの両方にとって,役割はまったく同じであるが,パラメータを受け入れる方法は異なる.たとえば、次のように定義されている関数があります.
var func = function(arg1, arg2) {
     
};

次のように呼び出すことができます.
func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2])

この中でthisはあなたが指定したいコンテキストで、彼はどのJavaScriptオブジェクト(JavaScriptのすべてのオブジェクト)でもよく、callはパラメータを順番に渡す必要がありますが、applyはパラメータを配列に入れます.
JavaScriptでは、ある関数のパラメータ数は固定されていないので、適用条件といえば、パラメータが数を明確に知っている場合にcallを使います.不確定な場合はapplyを用い,パラメータpushを配列に伝達する.パラメータの数が不確定である場合、関数内部はargumentsという擬似配列によってすべてのパラメータを遍歴することもできる.
apply、call、bind比較
ではapply、call、bindの3つを比較すると、どのような違いがあるのでしょうか.apply、call、bindはいつ使いますか.シンプルな栗:
var obj = {
    x: 81,
};
var foo = {
    getX: function() {
        return this.x;
    }
}
console.log(foo.getX.bind(obj)());  //81
console.log(foo.getX.call(obj));    //81
console.log(foo.getX.apply(obj));   //81

3つの出力は81ですが、bind()メソッドを使用していることに注意してください.彼の後ろには括弧が多くなっています.
すなわち、コンテキスト環境を変更した後、直ちに実行するのではなく、コールバック実行を望む場合はbind()メソッドを使用します.apply/callはすぐに関数を実行します.
さらにまとめてみます.
  • apply、call、bindの3つは、関数を変更するために使用されるthisオブジェクトの指向である.
  • apply、call、bindの3つの最初のパラメータは、thisが指すオブジェクト、すなわち指定したいコンテキストです.
  • bindは対応する関数を返し、後で呼び出すのに便利である.apply、callは即時呼び出しです.