call,appy,bind方法のまとめ
一般的にはthisを指定する環境に使われていますが、勉強していない前に、これらの問題があります.
call方法は、最初のパラメータ以外にも複数のパラメータを追加できます.
bindの方法とcall、applyの方法は少し違っていますが、いずれにしてもthisの指向を変えるために使えます.
まず、その違いを説明しましょう.
var a = {
user:"Lenovointer",
fn:function(){
console.log(this.user);
}
}
var b = a.fn;
b(); //undefined
1、コール()var a = {
user:"Lenovointer",
fn:function(){
console.log(this.user); //Lenovointer
}
}
var b = a.fn;
b.call(a);
callメソッドでは、最初のパラメータにbをどの環境に追加するかによって、簡単に言えば、thisはそのオブジェクトを指します.call方法は、最初のパラメータ以外にも複数のパラメータを追加できます.
var a = {
user:"Lenovointer",
fn:function(e,ee){
console.log(this.user); //Lenovointer
console.log(e+ee); //3
}
}
var b = a.fn;
b.call(a,1,2);
2、アプリ()var a = {
user:"Lenovointer",
fn:function(){
console.log(this.user); //Lenovointer
}
}
var b = a.fn;
b.apply(a);
同様に、複数のパラメータもありますが、異なるのは、2番目のパラメータは1つの配列でなければなりません.var a = {
user:"Lenovointer",
fn:function(e,ee){
console.log(this.user); //Lenovointer
console.log(e+ee); //11
}
}
var b = a.fn;
b.apply(a,[10,1]);
//もしcallとappyの最初のパラメータがnullと書いたら、thisはwindowの対象を指します.var a = {
user:"Lenovointer",
fn:function(){
console.log(this); //Window {external: Object, chrome: Object, document: document, a: Object, speechSynthesis: SpeechSynthesis…}
}
}
var b = a.fn;
b.apply(null);
3、ビッド()bindの方法とcall、applyの方法は少し違っていますが、いずれにしてもthisの指向を変えるために使えます.
まず、その違いを説明しましょう.
var a = {
user:"Lenovointer",
fn:function(){
console.log(this.user);
}
}
var b = a.fn;
b.bind(a);
コードは印刷されていないことが分かりました.これはbindとcall、applyの方法の違いです.実際にbindの方法は修正された関数です.var a = {
user:"Lenovointer",
fn:function(){
console.log(this.user); //Lenovointer
}
}
var b = a.fn;
var c = b.bind(a);
c();
ok、同じビッドにも複数のパラメータがあり、またパラメータを実行する際に追加することができますが、パラメータはイメージ順に行うことに注意してください.var a = {
user:"Lenovointer",
fn:function(e,d,f){
console.log(this.user); //Lenovointer
console.log(e,d,f); //10 1 2
}
}
var b = a.fn;
var c = b.bind(a,10);
c(1,2);
まとめ:callとappyは文脈のthisを変えてすぐにこの関数を実行します.bind方法は対応する関数にいつまで調整したいならいつ呼び出しますか?そしてパラメータを実行する時に追加できます.これは違いです.自分の実際の状況によって選択して使います.