在JS中,函数也是对象,因此也可以具有属性和方法。
在JavaScript中,call
、apply
和bind
是Function
对象自带的三个方法,这三个方法的主要作用是改变函数中的this
指向。
call
、apply
、bind
方法的共同点和区别:apply
、 call
、bind
三者都是用来改变函数的this对象的指向的;apply
、 call
、bind
三者第一个参数都是this要指向的对象,也就是想指定的上下文;apply
、 call
、bind
三者都可以利用后续参数传参;
bind
是返回对应函数,便于稍后调用;apply
、call
则是立即调用 。
call()方法和apply()方法的作用相同,区别仅在于接受参数的方式不同。
apply()方法接收两个参数,第一个是在其中运行函数的作用域,第二是是参数数组,可以是Array的实例,也可以是arguments对象。
1、apply():
function sum(num1,num2){
return num1+num2;
}
function callsum1(num1,num2){
return sum.apply(this,arguments); //传入arguments对象
}
function callsum2(num1,num2){
return sum.apply(this,[num1,num2]); //传入数组
}
alert(callsum1(10,10));
alert(callsum2(10,10));
2、call():
传递给函数的参数必须逐个列举出来:
function sum(num1,num2){
return num1+num2;
}
function callsum1(num1,num2){
return sum.call(this,num1,num2);
}
alert(callsum1(10,10)); //20
3、bind()方法:
bind会创建一个函数的实例,bind除了返回是函数以外,它的参数和call一样。
sum.bind(this,num1,num2)();
最后面的()表示函数执行。