call apply bindの違い
1780 ワード
javascriptにおけるapple、callとbindの違い
JSでは、この3つは関数を変えるためのthisオブジェクトの指向です.彼らはどのような違いがありますか?違いを言う前に、まず三つの似ているところをまとめます.は、関数のthisオブジェクトの指向を変更するために使用されます. の最初のパラメータは、すべてthisが指すオブジェクトです. は、後続のパラメータを用いて参照することができる. 違いはどこですか?まず例を見てください.
JSでは、この3つは関数を変えるための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)(" "," ");