call()方法:
functionname.call(thisObject,argument1,arguement2,..)
apply()方法:
functionname.apply(thisObject,[argument1,arguement2,..])
注:thisObject指的是另一个对象的名字
定义:
call():调用一个对象的一个方法,用另一个对象替换当前对象
apply():调用一个对象的一个方法,用另一个对象替换当前对象
注:call()方法和apply()方法的作用是一样的,只是他们接收参数的方式不同。
call()、apply()的基本用法
1. 扩充函数作用域
var color=”red”; //全局变量
var o={color:"blue"};
function sayColor(){alert(color);}
sayColor(); //red
sayColor.call(o); //blue
sayColor.apply(o); //blue
2. 实现继承:
function Animal(name){
this.name = name;
}
function Cat(name){
//apply的用法
Animal.apply(this,[name]);
Animal.apply(this,arguments);
//call的用法
Animal.call(this,name);
}
var cat = new Cat(“猫”);
Console.log(cat.name);
3. 实现多重继承:
function Animal(name){
this.name = name;
}
function catList(name){
This.eat=function(){
return name+”正在吃东西”;
}
}
function titleCat(name){
//apply的用法
Animal.apply(this,[name]);
catList.apply(this,[name]);
//call的用法
Animal.call(this,name);
catList.call(this,name);
}
var cat = new Cat(“猫”);
console.log(cat.name);
console.log(cat.eat());
4. 其他用法:
(1)找数组中的最大值:
Math.max.apply(null,[1,45,56,2,7]);
(2)合并两个数组
Var arr1=[1,34,56,4];
Var arr2=[3,3,57,98];
Array.prototype.push.apply(arr1,arr2);