相同
- 以传入的第一个参数作为
this
的指向 - 都可传入其他参数
不同
-
apply
是通过数组来传递 -
call
是按参数列表传递
func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2])
-
bind()
方法会创建一个新函数,称为绑定函数
var obj = {
x: 1,
};
var foo = {
getX: function() {
return this.x;
}
}
console.log(foo.getX.bind(obj)()); //1
console.log(foo.getX.call(obj)); //1
console.log(foo.getX.apply(obj)); //1
总结
-
bind()
方法会在调用时执行,而apply/call
则会立即执行函数 - 当参数固定时用
call
,不固定时用apply
,并且可以用arguments
来遍历所有的参数