本文結合基本JavaScript的權威書籍中的內容,根據自己的理解,通過相關示例向大家展示了JavaScript中call,apply使用及區別,希望大家能夠喜歡,如有不足,也希望提出建議,大家共同進步。
JavaScript權威指南(第6版) PDF中文版+英文版+源代碼 下載地址見 http://www.linuxidc.com/Linux/2013-10/91056.htm
call()
方法在使用一個指定的this值和若干個指定的參數值的前提下調用某個函數或方法.
apply()
方法在指定 this值和參數(參數以數組或偽數組的形式存在)的情況下調用某個函數。
a
apply()方法接受的是一個包含多個參數的數組及偽數組。
fun.call(thisArg,arg1,arg2...)
fun.apply(thisArg,[argArray1, argArray2...])
1).thisArg
需要注意的是,指定的this
值並不一定是該函數執行時真正的this值,如果這個函數處於非嚴格模式下,則指定為null和undefined的this值會自動指向
全局對象(浏覽器中就是window對象),同時值為基本數據類型時(數字,字符串,布爾值)的this會指向該基本數據類型的自動包裝對象。 2).arg1, arg2, ...
1).
thisArg
會自動指向
全象 2).
argsArray
為
null或undefined,則表示不需要傳入任何參數。但是使用偽數組時,要考慮兼容性問題。返回結果包括制定的this值和參數。
下面列舉一下這兩種方法的常用場景。
在一個子構造函數中,你可以通過調用父構造函數的call方法來實現繼承.下例中,使用Student構造函數創建的對象實例都會擁有在Person構造函數中添加的name屬性和age屬性,但study屬性是在構造函數中定義的。
function Person(name,age){
this.name=name;
this.age=age;
}
function Student(name,age){
Person.call(this,name,age);
this.study="math";
}
var excellent=new Student("李四",20)
console.log(excellent) // Student {name: "李四", age: 20, study: "math"}
2.使用apply和內置對象
聰明的apply用法允許你在某些本來需要寫成遍歷數組變量的任務中使用內建的函數(內置對象)。在接下裡的例子中我們會使用Math.max/Math.min來找出一個數組中的最大/最小值。
var numbers=[2,3,7,8,6]
var max=Math.max.apply(,null,numbers)
var min=Math.min.apply(,null,numbers)
console.log(max) //8
console.log(min) //2
。