我已经知道 apply
和 call
是设置 this
(函数的上下文)的相似函数。
不同之处在于我们发送参数的方式(手动与数组)
问题:
但是我什么时候应该使用 bind()
方法呢?
var obj = {
x: 81,
getX: function() {
return this.x;
}
};
alert(obj.getX.bind(obj)());
alert(obj.getX.call(obj));
alert(obj.getX.apply(obj));
最佳答案
当您希望稍后使用特定上下文调用该函数时使用 .bind()
,这在事件中很有用。当您想立即调用函数并修改上下文时,请使用 .call()
或 .apply()
。
Call/apply 立即调用该函数,而 bind
返回一个函数,该函数在稍后执行时将设置正确的上下文以调用原始函数。这样您就可以在异步回调和事件中维护上下文。
我经常这样做:
function MyObject(element) {
this.elm = element;
element.addEventListener('click', this.onClick.bind(this), false);
};
MyObject.prototype.onClick = function(e) {
var t=this; //do something with [t]...
//without bind the context of this function wouldn't be a MyObject
//instance as you would normally expect.
};
我在 Node.js 中将它广泛用于异步回调,我想为其传递成员方法,但仍希望上下文是启动异步操作的实例。
bind 的一个简单、幼稚的实现如下:
Function.prototype.bind = function(ctx) {
var fn = this;
return function() {
fn.apply(ctx, arguments);
};
};
还有更多内容(例如传递其他参数),但您可以阅读更多内容并查看实际实现 on the MDN .
关于Javascript call() & apply() vs bind()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455009/