call apply bindの違い

1780 ワード

javascriptにおけるapple、callとbindの違い
JSでは、この3つは関数を変えるためのthisオブジェクトの指向です.彼らはどのような違いがありますか?違いを言う前に、まず三つの似ているところをまとめます.
  • は、関数のthisオブジェクトの指向を変更するために使用されます.
  • の最初のパラメータは、すべてthisが指すオブジェクトです.
  • は、後続のパラメータを用いて参照することができる.
  • 違いはどこですか?まず例を見てください.
    var xw={
        name: "  ",
        gender: " ",
        age: 24,
        say: function(){
            alert(this.name+" , "+this.gender+" ,  "+this.age);
        }
    }
    var xh={
        name: "  ",
        gender: " ",
        age: 18
    }
    xw.say();
    
    自分は何も言いませんが、表示されているのは王さん、男さんです.今年は24歳です.では、どのようにxwのsay方法でxhのデータを表示しますか?コールに対してはこのようにすることができます.
    xw.say.call(xh);
    
    アプリについては、このようにすることができます.
    xw.say.apply(xh);
    
    これは、ビンにとって必要である.
    xw.say.bind(xh)();
    
    直接xw.say.bind(xh)を書いたら、何の結果もないです.違いが見えますか?callとappyはいずれも関数の直接呼び出しですが、bindメソッドはまだ関数ですので、後は()を呼び出してください.じゃ、callとappyの違いは何ですか?私たちは例を少し書き直します.
    var xw={
        name: "  ",
        gender: " ",
        age: 24,
        say: function(school,grade){
            alert(this.name+" , "+this.gender+" ,  "+this.age+" , "+school+" "+grade);
        }
    }
    var xh={
        name: "  ",
        gender: " ",
        age: 18
    }
    
    say法は二つのパラメータを多くしていることが見られます.コールにとってはこうです.
    xw.say.call(xh,"    ","   ");       
    
    アプリにとってはこんな感じです.
    xw.say.apply(xh,["    ","   "]);
    
    違いを見ましたか?callの後ろのパラメータはsay方法と一対一で対応していますが、appyの二番目のパラメータは配列で、配列の中の要素はsay方法と一対一で対応しています.これは両者の最大の違いです.ビッドはどうやって渡参しますか?callのように伝わることができます.
    xw.say.bind(xh,"    ","   ")();
    
    しかし、ビッドが戻ってきたのはまだ関数ですので、呼び出し時にまた転送できます.
    xw.say.bind(xh)("    ","   ");