5
myFunction.call(thisArg, arg1, arg2 ...)

我的理解是,当我使用call方法并提供一个函数时,函数中thisArgthis值被设置为我传入的对象。

myFunction.bind(thisArg, arg1, arg2 ...)

bind另一方面,该方法返回一个新函数,新函数的上下文this设置为我传入的对象。

但我不明白为什么要使用bind而不是call. 如果我只想改变 , 的上下文thiscall对我来说似乎就足够了。那么为什么在IE8及以下浏览器中中断时使用bind。

那么,bind与 相比,何时使用成为更好的情况call

4

1 回答 1

12

与 相比,何时使用bind成为更好的情况call

回调。

如果您需要确保在特定对象的上下文中调用函数,但无法控制函数的调用方式(例如当您将函数作为参数传递给回调时),您可以使用bind.

var f,
    example;
f = new Foo();
example = document.getElementById('example');

//`f.bar` is called in the context of `f`
f.bar();

//`f.bar` will be called in the context of `example`
example.addEventListener('click', f.bar); 

//`f.bar` will be called in the context of `f`
example.addEventListener('click', f.bar.bind(f));
于 2013-04-06T20:19:16.710 回答