javascript中 Function.prototype.apply()與Function.prototype.call() 對比詳解

來源:互聯網
上載者:User

javascript中 Function.prototype.apply()與Function.prototype.call() 對比詳解
apply()方法可以在使用一個指定的 this 值和一個參數數組(或類數組對象)的前提下調用某個函數或方法。call()方法類似於apply(),不同之處僅僅是call()接受的參數是參數列表。簡而言之:apply()一個this,一個參數call()   一個this,多個參數文法 fun.apply(thisArg[, argsArray])|fun.call(thisArg[, arg1[, arg2[, ...]]])參數 apply():thisArg:在fun函數運行時指定的this值。需要注意的是,指定的this值並不一定是該函數執行時真正的this值,如果這個函數處於非strict 模式下,則指定為null和undefined的this值會自動指向全域對象(瀏覽器中就是window對象),同時值為原始值(數字,字串,布爾值)的this會指向該原始值的自動封裝對象。argsArray:數組(或類數組對象)call():thisArg:同apply()的參數描述。arg1[,arg2[,arg3[……]]]:參數列表  //apply()的demofunction SiteInfo(name,site) {    this.name = name;    this.site = site;}function ContactMe(name,site,qq) {    //SiteInfo.apply(this, {0:name, 1:site, length:2});    //SiteInfo.apply(this, [name, site]);    SiteInfo.apply(this, arguments);    this.qq = qq;}var contactMe = new ContactMe("unofficial","www.pushself.com","1936**3***");console.log("你好,我是"+contactMe.name+",歡迎訪問"+contactMe.site+",有問題可以留言,也可以通過QQ:"+contactMe.qq+"及時聯絡到我");這裡是apply()的應用,其中主要注意的是argsArray這個參數,它可以是數組,也可以是類數組對象。arguments對象是所有方法中提供的一個局部變數;不能在方法的原型屬性中使用。需要特別說明的是arguments不是一個數組,只是一個類數組。 //call()的demofunction SiteInfo(name,site) {    this.name = name;    this.site = site;}function ContactMe(name,site,qq) {    SiteInfo.call(this, name, site);    this.qq = qq;}var contactMe = new ContactMe("unofficial","www.pushself.com","1936**3***");console.log("你好,我是"+contactMe.name+",歡迎訪問"+contactMe.site+",有問題可以留言,也可以通過QQ:"+contactMe.qq+"及時聯絡到我");這裡是call()的應用,其中需要注意的是第二個參數是由很多的參數構成的一個列表。本文原創部落格地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com擴充DEMO可以用apply()求數組中最大值,例如,我要求一個數組var arr = [19,360,0,3000]; var arr = [19,360,0,3000],    maxVal = Math.max.apply(null, arr),    minVal = Math.min.apply(null, arr);console.log("arr中最大值為:"+maxVal+",最小值為:"+minVal);這個是利用apply()求數組中的最大值,通常我們利用Math.max()求的是一個列表的最大值,例如:Math.max(19,360,0,3000),得到最大值為3000,如果這個是一個數組或者一個數組對象,我們怎麼求得它的最大值呢?就是利用apply()來解決,Math.max.apply(null, arr)相當於this對象就是Math.max,將arr經過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.