在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();