call 怀骤,apply 都屬于 Function.prototype 的一個方法焕妙,它們是在 JavaScript 引擎內(nèi)實現(xiàn)的,因為屬于 Function.prototype痕届,所以每個 Function 對象實例都有 call末患,apply 方法
call,apply 的定義:
apply 調(diào)用一個對象的一個方法璧针,以另一個對象替換當前對象。
call 應(yīng)用某一對象的一個方法申屹,用另一個對象替換當前對象隧膏。
語法:
call([thisObj[,arg1[, arg2[, [,.argN]]]]]) // fn.call(obj,p1,p2,...);
apply([thisObj[,argArray]]) //fn.apply(obj,[p1,p2...])
由上可知 apply 與 call 的功能一樣,只是傳入?yún)?shù)列表形式不同忌栅。
實例:
function Animal () {
this.obj = "Animal";
this.showName = function(name){
console.log(this.obj,name);
}
}
function Cat(){
this.obj = "Cat";
}
var animal = new Animal();
var cat = new Cat();
animal.showName.call(cat,"Tom"); // "Cat" "Tom"
上面的代碼cat想要調(diào)用showName方法打印信息,但是由于cat自身是沒有showName 方法,無法實現(xiàn)調(diào)用湖员,而call的使用 把 animal 的showName方法放到了cat上執(zhí)行瑞驱,使得 cat 能調(diào)用animal.showName(call 應(yīng)用某一對象的一個方法,用另一個對象替換當前對象凳寺。)彤侍,所以最終能輸出結(jié)果 "Cat" "Tom"。
apply 的調(diào)用方式
animal.showName.apply(cat,["Tom"]);