call和apply都是指一个函数调用另一个函数的值,可以不用再定义函数方法,call和apply的区别是:apply的第二个参数是指数组,call的第二个参数是指一列数值
eg:
未用call属性
var color = "red";
function showColor(){
alert(this.color);
}
function Circle(color){
this.color=color;
this.showColor=showColor;
}
var c = new Circle('yellow');
c.showColor();
showColor();//red
用了call方法进行调用
var color = "red";
function showColor(){
alert(this.color);
}
// 创建了一个类,有一个color的属性和一个show的方法
function Circle(color){
this.color=color;
}
var c = new Circle('yellow');
showColor.call(this); //red
showColor.call(c); // yellow
apply的用法
function sum(num1, num2){
return num1+num2;
}
function callSum1(num1, num2){
//使用sum这个函数来完成一次调用,调用的参数就是callSum这个函数的参数
// apply的第二个参数表示一组参数数组
return sum.apply(this,arguments);
}
function callSum2(num1,num2){
// 关键就是第二个参数是数组
return sum.apply(this,[num1,num2])
}
alert(callSum1(12,22)); //34
alert(callSum2(22,32)); //54
call的用法
function callSum3(num1,num2){
//call是通过参数列表来完成传递,其他和apply没有任何区别
return sum.call(this,num1,num2);
}
alert(callSum3(2,4));