[每天解決一問題系列 - 0001] Javascript apply和 call對比

來源:互聯網
上載者:User

標籤:

相同點:

  • 每個函數都包含這兩個原生的方法
  • 他們兩個的效果是一樣的,用於在特定的範圍下執行函數,本質上是設定函數內this對象的值。

不同點:

  • 傳入的參數類型不同 。 apply(函數範圍,array[參數]), call(函數範圍,參數1, 參數2, 參數3...). 注意:函數範圍 參數不傳或者null,預設為window;在strict 模式下則為undefined, 即無效的範圍。

應用情境:

  • 這兩個函數最大的作用在於擴充函數賴以啟動並執行範圍,其好處在於對象不需要與方法有任何的耦合關係,用“借雞生蛋”來形容最恰當不過了。
  • 樣本
    window.color = "red";var o = ( color: Oblue);function sayColor(){alert(this.color);sayColor() ; //redøayColor.ca11(tbis); // redøayColor.ca11(window); // redøayColor.call(o); //blue

      

補充:

  • 在ECMAScript 5中還定義了一個方法bind(), 這個方法會建立一個函數的執行個體,其this值會被綁定到傳給bind()函數的值.
  • 樣本
    window.color = "red";var o = ( color: "blue " );function sayColor(){alert(this.color);var objectSayColor = sayColor.bind(o);
    objectSayColor(); // blue

    支援bind() 方法的瀏覽器有IE9+、Firefox4+ 、Safari 5.1+ 、Opera 12+和Chrome 。

參照:

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

[每天解決一問題系列 - 0001] Javascript apply和 call對比

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.