call,apply,bind其实都是改变this指向的
但是这里需要注意的是 bind 会返回一个新函数,并且是不会调用的,它只是单纯改变了函数的this指向而已
而call,和apply却是改变了this指向又立马调用了函数;
例如:
function b(a) {
console.log(a);
}
var c = b.bind(this,'bind');
var d = b.call(this,'call');
这里只会输入输入'call'
因为b.call(this,'call');就是调用函数b()
而b.bind(this,'bind')只是单纯的改变了b函数的this指向而已,并且返回了一个新的函数,并不会调用b();
apply: 接受两个参数 : this执行和一个类数组arguments,一般放在函数内部调用,继承函数内所有的参数,不过也可以像下面那样用
b.apply(this,[1,2]);
function b(a,d) {
console.log(a);
if (d) {
console.log(d);
}
c.apply(this, arguments);
}
function c (a,d) {
console.log(a,d);
}
b(3,4);