函數對象的apply()和call()方法

來源:互聯網
上載者:User

標籤:

  每個函數都包含兩個非繼承而來的方法:apply()和call()。這兩個方法的用途都是在特定的範圍中調用函數,特定的範圍為this參數指定的對象。

  apply()和call()真正強大的地方是能夠擴充函數賴以啟動並執行範圍。下面來看一個例子:

window.color = "red";var o = {color: "blue"};function sayColor() {    alert(this.color);}sayColor();                      // redsayColor.call(this);             // redsayColor.call(window);           // redsayColor.call(o);                // blue

  sayColor()作為全域函數定義,而且當在全域範圍中調用它時,它確實會顯示“red”——因為對this.color的求值會轉換成window.color的求值。而sayColor.call(this)和sayColor.call(window),則是兩種顯式地在全域範圍中調用函數的方式,結果當然都會顯示“red”。

  但是,但運行sayColor.call(o)時,函數的執行環境就不一樣了,因為此時函數體內的this對象指向了o,於是結果顯示的是“blue”。

  使用call()或apply()來擴充範圍的最大好處,就是對象不需要與方法有任何耦合關係。

函數對象的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.