gpt4 book ai didi

javascript - JS 在传递之前绑定(bind)一个函数的上下文

转载 作者:行者123 更新时间:2023-11-30 18:07:35 25 4
gpt4 key购买 nike

我正在尝试设置一个存储回调的函数,该回调可以稍后在事件发生时触发,但我没有正确绑定(bind)上下文。设置基本上是这样的:

app.myObject = function(){
this.bindEvents();
};
app.myObject.prototype = {
bindEvents: function(){
var self = this;
this.library = new OutsideLibrary();
this.library.onMyEvent = function(data) {
OtherLibrary.processData(data, self.runCallback); // I'm not able to pass a context here...
}
},
sendToLibrary: function(message,callback) {
this.callback = callback;
this.library.send(message);
}
// ... and this doesn't work because it gets evaluated in the wrong context.
runCallback: function() {
if (this.callback) {
this.callback();
this.callback = null;
}
}
}

我希望上面的代码有意义。我的想法是,我正在尝试公开一个我可以调用的 API:

app.myObject.sendToLibrary("something", function() {...});

...回调函数将在整个链完成后运行。

问题是,我无法直接传递在 sendToLibrary 中接收到的回调,因为事件触发时需要将回调传递给另一个对象。此外,由于我必须存储当前传递的回调,并且回调是可选的,所以我需要在它触发后取消设置,所以我实际上需要传递 runCallback 函数来运行一次回调然后取消设置。

无论如何,问题在于当 runCallback 最终被执行时,它不再处于正确的上下文中,因此它不起作用。关于如何解决这个问题,我的第一个想法是更改 runCallback 函数以包含上下文参数,这样我就可以传递 self.runCallback(self) —— 但会立即执行所以它违背了目的。

无论如何,我有点迷失在回调森林里,希望能帮我找到出路:)

我的问题是:有没有一种方法可以包装一个回调函数和正确的上下文,而不是现在执行它,以便当它最终触发时,它会从正确的上下文中触发?

谢谢!

最佳答案

OtherLibrary.processData(data, function() {
self.runCallback();
)};

然后在 runCallbackthis 引用 app.myObject 的实例,如果这是你想要的。

关于javascript - JS 在传递之前绑定(bind)一个函数的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15441167/

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