apply的一些用法

一、apply:方法能劫持另外一個對象的方法,繼承另外一個對象的屬性。

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

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

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

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

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

在調用apply方法的時候,第一個參數(shù)是對象this,第二個參數(shù)是一個數(shù)組集合,在調用Person的時候,方法需要的不是一個數(shù)組,而是一個一個的參數(shù)。apply的一個巧妙的用處,就是可以將一個數(shù)組轉換為參數(shù)列表([param1, param2, param3] 轉換為 param1, param2, param3) 。如果用程序實現(xiàn)數(shù)組的每一個項,轉換為參數(shù)的列表,可能都得費一會功夫。借助apply的這點特性可以提高效率。

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

因為Math.max 參數(shù)里面不支持Math.max([param1,param2]) 也就是數(shù)組
但是它支持Math.max(param1,param2,param3…),所以可以根據(jù)剛才apply的那個特點來解決:
var max = Math.max.apply(null, array);
這樣就可以得到一個數(shù)組中最大的一項(apply會將一個數(shù)組轉換為一個參數(shù)接一個參數(shù)的傳遞給方法)
這塊在調用的時候第一個參數(shù)給了一個null,因為沒有對象去調用這個方法,直接傳遞了一個null。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容