apply的一些用法

一、apply:方法能劫持另外一個(gè)對(duì)象的方法,繼承另外一個(gè)對(duì)象的屬性。

Function.apply(obj, args) 方法能接收兩個(gè)參數(shù)
obj:這個(gè)對(duì)象將代替Function類(lèi)里this對(duì)象
args:這個(gè)是數(shù)組,它將作為參數(shù)傳給Function(args-->arguments)

 // 定義一個(gè)人類(lèi)
function Person(name, age) {  
    this.name = name;
    this.age = age;
}  
// 定義一個(gè)學(xué)生類(lèi)
function Student(name, age, grade) {
    Person.apply(this, arguments);
    this.grade = grade;
}
// 實(shí)例化一個(gè)學(xué)生類(lèi)
var s = new Student('Jon', 18, '大一');
console.log(s.name, s.age, s.grade);
// Jon 18 大一

學(xué)生類(lèi)里面沒(méi)有給name和age屬性賦值,為什么又存在這兩個(gè)屬性的值呢?這個(gè)就是apply的神奇之處。

分析:
Person.apply(this, arguments);
this:在創(chuàng)建對(duì)象在這個(gè)時(shí)候代表的是Student
arguments:是一個(gè)數(shù)組,也就是['Jon', 18, '大一'];
即用Student去執(zhí)行Person這個(gè)類(lèi)里面的內(nèi)容,在Person這個(gè)類(lèi)里面存在this.name等之類(lèi)的語(yǔ)句,這樣就將屬性創(chuàng)建到了Student對(duì)象里面。

二、apply的一些其他巧妙用法

在調(diào)用apply方法的時(shí)候,第一個(gè)參數(shù)是對(duì)象this,第二個(gè)參數(shù)是一個(gè)數(shù)組集合,在調(diào)用Person的時(shí)候,方法需要的不是一個(gè)數(shù)組,而是一個(gè)一個(gè)的參數(shù)。apply的一個(gè)巧妙的用處,就是可以將一個(gè)數(shù)組轉(zhuǎn)換為參數(shù)列表([param1, param2, param3] 轉(zhuǎn)換為 param1, param2, param3) 。如果用程序?qū)崿F(xiàn)數(shù)組的每一個(gè)項(xiàng),轉(zhuǎn)換為參數(shù)的列表,可能都得費(fèi)一會(huì)功夫。借助apply的這點(diǎn)特性可以提高效率。

1.Math.max 可以實(shí)現(xiàn)得到數(shù)組中最大的一項(xiàng)

因?yàn)镸ath.max 參數(shù)里面不支持Math.max([param1,param2]) 也就是數(shù)組
但是它支持Math.max(param1,param2,param3…),所以可以根據(jù)剛才apply的那個(gè)特點(diǎn)來(lái)解決:
var max = Math.max.apply(null, array);
這樣就可以得到一個(gè)數(shù)組中最大的一項(xiàng)(apply會(huì)將一個(gè)數(shù)組轉(zhuǎn)換為一個(gè)參數(shù)接一個(gè)參數(shù)的傳遞給方法)
這塊在調(diào)用的時(shí)候第一個(gè)參數(shù)給了一個(gè)null,因?yàn)闆](méi)有對(duì)象去調(diào)用這個(gè)方法,直接傳遞了一個(gè)null。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容