Javascript-如何保存对“;这个“;用于使用原型模式在命名函数回调中进行访问

Javascript - How to save a reference to "this" for access in named function callback using prototype pattern

本文关键字:模式 函数 访问 回调 原型 何保存 保存 Javascript- 用于 这个      更新时间:2023-09-26

我在获取对用回调中的原型模式。回调来自第三方组件我在我的对象中使用。第三方对象连接到消息总线。

下面的伪代码显示了我是如何开始的(真正的代码正在工作)

var mb = require('MsgBus')
TestClass = function() {
  this.messagebus = new mb.MsgBus();
  this.messagebus.connect(function(err) {
      if(err)
        console.log("Error connecting");
      else
        console.log("Connected");
  });
}

但后来我想让它在回调报告时自动重试连接错误。如果if(err)阻止了,我不能再加一行说"this.messagebus.connection",因为我必须添加另一个匿名方法进行连接回调,它会一直持续下去。所以,我想将回调逻辑拆分为一个命名函数,如

var mb = require('MsgBus')
TestClass = function() {
  this.messagebus = new mb.MsgBus();
  this.messagebus.connect(msgBusConnectCallback); 
}
function msgBusConnectCallback(err) {
      if(err)
        this???.messagebus.connect(msgBusConnectCallback);
      else
        console.log("Connected");
  });
}

回调函数被调用,但我不知道如何获得引用到对象以再次调用connect。我还试着让回调对象的原型函数,仍然没有引用。我无法创建变量在全局范围中维护"this",因为此类的用户可能创建类的多个实例。我是JavaScript的新手,所以我不知道我是错过了什么,还是需要采取不同的方法总共如果有任何帮助和/或指导,我将不胜感激。

this.messagebus.connect.apply(this, [msgBusConnectCallback]);

我终于找到了答案,正确的语法是this.messagebus.connect(msgBusConnectCallback.bind(this));