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()後處理成了列表,最後求得最大值,或者最小值。