JavaScript中的每一个Function对象都有一个apply()方法和一个call()方法,它们的语法分别为:
/*apply()方法*/
function.apply(thisObj, [arg1, arg2, ...])
// call()方法
function.call(thisObj, arg1, arg2, ...argN);
定义:
apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。
call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。
它们的共同之处:
都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象”。
它们的不同之处:
只是传入的参数列表形式不同。
示例代码:
(一)基本用法:
function add(a,b) {
return a+b;
}
function sub(a,b) {
return a-b;
}
var a1 = add.apply(sub,[4,2]); //sub调用add的方法
var a2 = sub.apply(add,[4,2]);
console.log(a1); //6
console.log(a2); //2
/*call的用法*/
var a1 = add.call(sub,4,2); //sub调用add的方法
(二)实现继承:
function Animal(name){
console.log(this); // Cat {}
this.name = name;
this.showName = function(){
alert(this.name);
}
}
function Cat(name){
console.log(this); // Cat {}
Animal.apply(this,[name]);
}
var cat = new Cat("喵喵");
cat.showName();
/*call的用法*/
Animal.call(this,name);