apply/call/bind之间的区别

时间:2023-01-30 22:08:13

apply 方法
先说 apply 方法,它让我们构造一个参数数组传递给函数,同时可以自己来设置 this 的值。
apply 函数接收 2 个参数,第一个是传递给调用这个方法的函数绑定的this 取值,第二个是传递给函数的参数数组。
看代码:

function a(xx) {        
this.b = xx;
}
var o = {};
a.apply(o, [
5]);
alert(a.b);
// undefined
alert(o.b); // 5

这样函数a就给对象o添加了一个属性。
如果apply的第一个参数传递 null,那么在函数 a 里面 this 指针依然会绑定全局对象

 

call 方法
call()和apply()的区别只是第二个参数的形式改变仅此而已
看代码:

function a(xx, yy) {    
alert(xx, yy);
alert(
this);
alert(arguments);
}
a.apply(
null, [5, 55]);
a.call(
null, 5, 55);

 

bind()
最后再来说 bind() 函数,上面讲的无论是 call() 也好, apply() 也好,都是立马就调用了对应的函数,
而 bind() 不会, bind() 会生成一个新的函数,bind() 函数的参数跟 call() 一致,
第一个参数也是绑定 this 的值,后面接受传递给函数的不定参数。
bind() 生成的新函数返回后,你想什么时候调就什么时候调,看下代码就明白了

var m = {   
"x" : 1
};
function foo(y) {
alert(
this.x + y);
}
foo.apply(m, [
5]);
foo.call(m,
5);
var foo1 = foo.bind(m, 5);
foo1();