call ,apply 都属于 Function.prototype 的一个方法,它们是在 JavaScript 引擎内实现的,因为属于 Function.prototype,所以每个 Function 对象实例都有 call,apply 方法
call,apply 的定义:
apply 调用一个对象的一个方法,以另一个对象替换当前对象。
call 应用某一对象的一个方法,用另一个对象替换当前对象。
语法:
call([thisObj[,arg1[, arg2[, [,.argN]]]]]) // fn.call(obj,p1,p2,...);
apply([thisObj[,argArray]]) //fn.apply(obj,[p1,p2...])
由上可知 apply 与 call 的功能一样,只是传入参数列表形式不同。
实例:
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想要调用showName方法打印信息,但是由于cat自身是没有showName 方法,无法实现调用,而call的使用 把 animal 的showName方法放到了cat上执行,使得 cat 能调用animal.showName(call 应用某一对象的一个方法,用另一个对象替换当前对象。),所以最终能输出结果 "Cat" "Tom"。
apply 的调用方式
animal.showName.apply(cat,["Tom"]);