一个函数

1
2
3
function show(x, y){
alert(this);//[Objes y);//10,20
}

要改变它的this指向,有几种方法:
方法1:call
格式: 函数名.call();
参数:第一个参数:传入该函数this指向的对象,传入什么就强制指向什么
从第二个参数开始,将原函数的参数往后顺延一位
注:call主要目的是为了绑定参数,apply则是出现…运算符之前的老旧写法

1
show.call("call", 20, 40);

方法2:apply
格式:函数名.apply();
参数:第一个参数;传入该函数this指向的对象,传入什么就强制指向什么
第二个参数:数组,放入原有的所有参数

1
show.apply("call", [20, 40]);

方法3:bind预设this指向

1
2
3
4
5
6
7
function show(x, y){
alert(this);
alert(x + "," + y);
}
var res = show.bind("bind");
//res(40, 50);
show.bind("bind")(40, 50);

apply使用方法的小技巧

1
2
3
4
Math.min();
Math.max();
alert(Math.min(10,20,30,40,50));
alert(Math.max(10,20,30,40,50));

等同于

1
2
3
var arr = [10,20,30,40,50];
alert(Math.min.apply(null, arr));
alert(Math.max.apply(null, arr));