apply & call

96
EastC
2017.03.30 17:23* 字数 250

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"]); 
前端笔记