JavaScript 的apply,call和bind

JavaScript 的apply,call和bind

  • 每個函數(shù)都包含兩個非繼承而來的方法:apply(), call().

    • 這個兩個方法的用途都是在特定的作用域中調用函數(shù)實際上等于設置函數(shù)體內的this對象的值。

    • apply() 方法接受兩個參數(shù)

      • -個是在其中運行函數(shù)的作用域,也就是this
      • 另一個是參數(shù)數(shù)組。這個數(shù)組可以是Array的實例,也可以是arguments對象
    • call() 方法與 apply()方法的作用相同,區(qū)別僅在于接受參數(shù)的方法不同

      • call() 方法第一個參數(shù)是一樣是this,變化的是其余參數(shù)都直接傳遞給函數(shù)。在使用call()方法時,傳遞給函數(shù)的參數(shù)必須逐個列舉出來
    • apply() 和 call() 方法的真正用處是可以拓展函數(shù)賴以運行的作用域,而擴充作用域的最大好處,就是對象不需要與方法有任何耦合關系

      window.color = 'red';
      var o = {
      color: 'blue'
      }
      function saycolor() {
          console.log(this.color);
      }
      
      saycolor() // red
      sayColor.call(this)  //red, 因為在全局下的this默認是window || global
      saycolor.call(window)  //red
      saycolor.call(o)   //clue
      
  • ES5中還定義了一個方法: bind().

    • bind() 方法會創(chuàng)建一個函數(shù)的實例,這個函數(shù)實例的this值會被綁定到傳給 bind() 函數(shù)的值
    window.color = 'red';
    var o = {
        color: 'blue'
    }
    
    function saycolor() {
        console.log(this.color);
    }
    
    var objectsaycolor = saycolor.bind(this)
    objectsaycolor();    //blue
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容