call,apply,bind都可以动态改变函数体内部的this指向,只是用法不同。call接受连续参数,apply接受数组参数,如
function add(a,b){
return a+b;
}
add.call(add, 5, 3); //8
add.apply(add, [5, 3]); //8
bind 接受的参数跟 call 一致,只是 bind 不会立即调用,它会生成一个新的函数,你想什么时候调就什么时候调。如下代码:
function add(a, b){
return a+b;
}
var foo1 = add.bind(add, 5,3);
foo1(); //8
var foo1 = add.bind(add, 5,3);
foo1(); //8