gpt4 book ai didi

Javascript call() & apply() vs bind()?

转载 作者:行者123 更新时间:2023-11-29 15:59:50 25 4
gpt4 key购买 nike

我已经知道 applycall 是设置 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));

jsbin

最佳答案

当您希望稍后在特定上下文中调用该函数时,请使用 .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/54562005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com