JavaScript 函数的apply()方法和call()方法

来源:互联网 发布:大学生竞赛网站知乎 编辑:程序博客网 时间:2024/05/28 05:13

在JavaScript中,每个函数都包含两个非继承而来的方法:apply( )和call( )。这


两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this


对象的值。


(1)apply( )方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组。


其中,第二个参数可以是Array的实例,也可以是arguments对象。如例1所示:


例1:

function sum(num1,num2){
return num1*num2;
}
function callSum1(num1,num2){
return sum.apply(this,arguments);//此时的this值是在全局作用域中调用的
}
function callSum2(num1,num2){
return sum.apply(this,[num1,num2]);
}
alert(callSum1(10,10));//结果为:100
alert(callSum2(100,10));//结果为:1000


(2)call( )方法与apply( )方法作用相同,区别仅在于接收函数的方式不同。对于call( )方


法而言,传递给函数的参数必须逐个列举出来。


apply( )方法和call( )方法能够扩充函数运行的作用域。如例2所示:


例2:

window.color="red";
var o={color:"green"};
var aaa={color:"gold"};
function getColor(){
alert(this.color);
}
getColor(); //输出值:red,在全局环境中调用,会使用全局属性
getColor.apply(this);//输出值:red,此处的this指的是全局环境
getColor.apply(o);//输出值:green,此处的this指的是o的环境
getColor.apply(aaa);//输出值:gold,此处的this指的是aaa的环境


(3)bind( )方法:

该方法会创建一个函数的实例,其this值会被绑定到传给bind( )函数的值。如例3所示:

例3:

window.color="red";
var o={color:"green"};
function getColor(){
alert(this.color);
}
var obj=getColor.bind(o);//此时getColor函数中this的值为o
obj();



阅读全文
0 0
原创粉丝点击