call()bind()apply()は見れば分かります.


愚かに見えますが、実は簡単なのは無駄話より少なく直接コードを言います.
コードセグメント1:
var name = '  ', age = 13;
var obj = {
  name: '    ',
  objAge: this.age,
  fun: function () {
    console.log('name:', this.name + ',Age:' + this.age);
  }
}
obj.fun() // name:     ,Age:undefined
コードセグメント2:
var name = '    '
function show () {
  console.log(this.name);
}
// show()  //     
二つのコードの違いを説明してください.
  • 最初のthisは、方法の使用者、すなわち、Objというオブジェクト
  • を指す.
  • の第二のthisは、あなたの関数が大域的な声明であるため、関数を実行する場合はthis window
  • です.
    主役を引っ張るべきだ
    call()appy()bind()
  • まず注意してください.この三つのアプリは全部「 this」のキーワードである
  • です.
    前のコードですか?
    var name = '  ', age = 13;
    var obj = {
      name: '    ',
      objAge: this.age,
      fun: function () {
        console.log('name:', this.name + ',Age:' + this.age);
      }
    }
    
    オブジェクトを追加
    var cxk = {
      name: '    ',
      age: 18
    }
    
    結果:
    obj.fun.call(cxk) // name:     ,Age:18
    obj.fun.apply(cxk) // name:     ,Age:18
    obj.fun.bind(cxk)() // name:     ,Age:18
    
  • ここにきて、この三つの機能はビッドに括弧を付けた以外に、他はすべて同じようにthisの方向を変えたので、thisを新たなオブジェクト
  • に向けた.
  • これでコードを観察して結論を出すことができます.
  • call()appy()は全部使用後、方法は直接
  • を実行します.
  • bit()は、手動で起動して
  • を実行する必要がある方法を返します.
    =======華やかな線引き
    call,appy,bingパラメータについて
    元のコードを少し修正します.funメソッドにパラメータを持たせます.
    var name = 'itcast', age = 13;
    var obj = {
      name: '    ',
      objAge: this.age,
      fun: function (from, to) { //             
        console.log('name:', this.name + ',Age:' + this.age, '  :', from, ' :', to, '    ');
      }
    }
    
    
    var cxk = {
      name: '    ',
      age: 18
    }
    
    obj.fun.call(cxk, '  ', '  ')   //     ,Age:18   :     :        
    obj.fun.apply(cxk, ['  ', '  ']) //    ,Age:18   :     :        
    obj.fun.bind(cxk, '  ', '  ')() //    ,Age:18   :     :        
    
    この時の観察コード:
  • パラメータ:
  • 最初のパラメータ:thisオブジェクト
  • の2番目のパラメータ:callとbindは、メソッドパラメータを直接に入れ、コンマで区切られています.applyだけが、方法のパラメータを行列に入れなければなりません.
  • .
    最後のまとめ:
    1、call、appy、bindはいずれもthisの指向を変える2、callであり、applyは直接的な呼び出し方法である3、bindはthisの指向を変えた後に戻る方法であり、手動で4、方法を呼び出して参照する必要があります.call、bindは直接パラメータを書き込み、中間はカンマで区切ってもいいです.
    WeChatを入れて一緒に勉強してください.13671593005です.