javascript 對象初探 (六)--- call()和apply()初探

來源:互聯網
上載者:User

標籤:

javascript中,每個函數都具有call()和apply()兩個方法,您可以用她們來觸發函數,並指定相關的調用參數。

此外,這兩個方法還有另一個功能,就是她可以讓一個對象去‘借用‘另一個對象的方法,並為己用。這也是一種簡單的代碼重用。

function her = {   name : ‘Anna‘,   say:function(a){        return ‘Hello‘+a+‘I am‘+this.name+‘!‘   }}

這樣一來我們就能調用her對象的say方法。

her.say(Jon); // ‘Hello Jon I am Anna!‘

 下面我們再建立一個對象,他只有一個name屬性:

var his = {    name : ‘Jock‘}

 顯然her的say()方法也同樣適用his()方法。因此我們希望say()方法當做his對象自身的方法來調用,這是就用到了call()或apply()方法:

her.say.call(his,‘Meng‘); // ‘Hello Meng I am Jock!‘

成功了,但您明白為啥嗎?因為這樣一來say()中的this就被自動化佈建成了his的對象的引用,因而this.name為Jock而不是Anna了!!!

另外,如果我們沒有將對象傳遞給call()或apply()的首參數,或傳遞的是null,她的調用對象將會預設為全域對象(即this指向window)。---實際上call()的第一個參數修改了對象this的指向。

apply()的原理其實和call()是相同的,只不過區別在於參數的傳遞形式,下面來對比一下:

her.say.call(his, a,b,c);her.say.apply(his, [a,b,c]);

 

javascript 對象初探 (六)--- call()和apply()初探

聯繫我們

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