1、作用
对象A代替对象B调用方法,既在方法中的this指向为A。
2、写法
function.apply(thisObj, arr)
function.call(thisOb, param1, param2,...)
3、区别
传的参数不同
- apply:只有两个参数。新的this对象和数组参数,必须要有效的数组。
- call:无数个参数。新的this对象和参数用‘,’隔开。
- 若没有this对象,则this指向Global
4、例子
简单用法
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]);
alert(a1); //6
alert(a2); //2
/*call的用法*/
var a1 = add.call(sub,4,2);
实现继承
function Animal(name){
this.name = name;
this.showName = function(){
alert(this.name);
}
}
function Cat(name){
Animal.apply(this,[name]);
}
var cat = new Cat("咕咕");
cat.showName();
/*call的用法*/
Animal.call(this,name);
多层继承
function Class10(){
this.showSub = function(a,b){
alert(a - b);
}
}
function Class11(){
this.showAdd = function(a,b){
alert(a + b);
}
}
function Class12(){
Class10.apply(this);
Class11.apply(this);
// Class10.call(this);
//Class11.call(this);
}
var c2 = new Class12();
c2.showSub(3,1); //2
c2.showAdd(3,1); //4
巧妙用法
const a = [1,2,3]
const b = [4,5,6]
const aMax = Math.max().apply(null, a) //最大值
Array.prototype.push.apply(a, b) // 合并数组