关于Js函数对象的apply()和call()方法

来源:互联网 发布:2017年的网络新词 编辑:程序博客网 时间:2024/06/06 18:45

每个函数都包含两个非继承而来的方法,call()和apply().这两个方法都是在特定的作用域中调用函数,实际等于设置函数体内this对象的值。
首先apply()方法接受两个参数,一个是其中运行函数的作用域,另一个参数是数组,可以是Array的实例也可以是arguments对象。
例如:
function sum(num1,num2)
{
retuen num1+num2;
}
function callsum1(num1,num2)
{
return sum.apply(this,arguments);
}
function callsum2(num1,num2)
{
return sum.apply(this,[num1,num2]);
}
alert(callsum1(10,10));//20
alert(callsum2(10,10));//20
这里因为实在全局作用域中调用的所以this是window对象。
call()方法和apply()方法作用相同,第一个参数相同,后面的传入的参数必须逐个列举出来。
function sum(num1,num2)
{
return num1+num2;
}
function callsum(num1,num2)
{
return sum.call(this,num1,num2);
}
alert(callsum(10,10));//20
实际上传递参数并不是这两个方法的真正用武之地,他们真正的作用是扩展作用域。
window.color = “red”;
var o ={color:”blue’};
function saycolor(){
alert(this.color);
}
saycolor.call(this);//red
saycolor.call(window);//red
saycolor.call(o);//blue
这里前面两个传入的参数都是window所以输出的是red,第三个传入的参数是o所以是的saycolor的this属性指向o,输出blue

0 0
原创粉丝点击