您的位置:首页 > 移动开发

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

2017-04-08 15:54 585 查看
每个函数都包含两个非继承而来的方法,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: