为什么使用Function.prototype.bind而不是Function.prototype.call?

时间:2013-04-06 20:10:51

标签: javascript

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

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

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

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

但我不明白为什么使用bind代替call。如果我想要做的就是改变this的上下文,call似乎对我来说已经足够了。那么为什么在IE8及以下版本的浏览器中断时会使用bind。

那么,与bind相比,何时使用call成为更好的案例?

1 个答案:

答案 0 :(得分:12)

  

bind相比,何时使用call成为更好的案例?

回调。

如果需要确保在特定对象的上下文中调用函数,但无法控制函数的调用方式(例如将函数作为参数传递给回调函数),则&# 39; d使用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));