js的call與apply

來源:互聯網
上載者:User

方法定義

call方法:
文法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
定義:調用一個對象的一個方法,以另一個對象替換當前對象。
說明:
call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的物件內容從初始的上下文改變為由 thisObj 指定的新對象。
如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。

apply方法:
文法:apply([thisObj[,argArray]])
定義:應用某一對象的一個方法,用另一個對象替換當前對象。
說明:
如果 argArray 不是一個有效數組或者不是 arguments 對象,那麼將導致一個 TypeError。
如果沒有提供 argArray 和 thisObj 任何一個參數,那麼 Global 對象將被用作 thisObj, 並且無法被傳遞任何參數


call與apply可以算的上是進階應用程式,如果有看過JQuery代碼的人就知道,這兩個方法在JQuery應用很多包括外掛程式機制,事件,迴圈等)。它的主要功能就是改變了調用方法的this。


例如

   function test(){

       alert(this.nodeName);

   }

在一般的通過test()使用中來看上面的函數會顯示undefined

但是如果我們使用這兩個方法結果可能就不一樣了

如test.call(document.body)或test.apply(document.body)顯示的內容就是 BODY

可能不好理解,其實可以這樣說:

   當使用test()時  this=test

   當使用test.call(document.body)或test.apply(document.body)時  this=document.body

雖然上面的文法不對,但可以形象的說明call與apply就是改變了this的值,通過物件導向的思想說就是改變了this的引用,也就等於調用test時使用了document.body對象,同等於給document.body對象添加了一個test方法,這種擴充可以批量擴充同一個方法,而且是動態擴充。當然如果方法內沒有使用this那使用call與apply意義不大。


結論:call與apply改變this指向傳入的第一個參數沒有傳入則是Global對象,後經測試就是window對象),第二個參數及以後都是調用這個方法的傳參。


技術有限,如果有不當之處還請指正。

本文出自 “web中的php” 部落格,請務必保留此出處http://php2012web.blog.51cto.com/5585213/1286837

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.