myFunction.call(thisArg, arg1, arg2 ...)
我的理解是,当我使用call
方法并提供thisArg
时,函数中的this
值设置为我传入的对象。
myFunction.bind(thisArg, arg1, arg2 ...)
另一方面,bind
方法返回一个新函数,其中新函数的this
的上下文设置为我传入的对象。
但我不明白为什么使用bind
代替call
。如果我想要做的就是改变this
的上下文,call
似乎对我来说已经足够了。那么为什么在IE8及以下版本的浏览器中断时会使用bind。
那么,与bind
相比,何时使用call
成为更好的案例?
答案 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));