Javascript 绑定问题

Javascript problems with bind

我是 JS 新手,无法弄清楚为什么 bind 会给我带来麻烦:

这是一个片段:

var MyTest = function() {
  registerChannel(address, null, this._messageHandler.bind(this));
};

MyTest.prototype._messageHandler = function(msg) {      
   this._logToConsole(msg); 
};

MyTest.prototype._close = function() {

  (function(inst) {
    asyncSend(address, data, 
      function(err, reply) {
        unregisterChannel(address, inst._messageHandler.bind(inst));
      }
    );
  })(this);
}

registerChannel 方法存储了我传递的回调函数,unregisterChannel 尝试验证此回调是否存在并失败,因为 'bind' 复制了该方法并且没有将它们传递为参考(据我所知)。

结果是unregisterChannel失败,因为它找不到我传递的函数

我该如何解决这个问题? apply\call ?不熟悉那些...

谢谢,我希望我的问题有意义...

每次调用 .bind 时都会得到一个新的引用,因此 "register" 和 "unregister" 阶段将不匹配,因为您没有传递完全相同的引用。

因此每个对象都需要保留其绑定处理程序的副本,例如:

var MyTest = function() {
  this._handler = this._messageHandler.bind(this);
  registerChannel(address, null, this._handler);
};

然后您可以将 this._handler 传递给您的 unregisterChannel 调用。

另一种方法是根本不将 _messageHandler 放在 prototype 上,并在构造函数中创建一个新实例:

var MyTest = function() {

  this._messageHandler = (function(msg) {
     ...
  }).bind(this);

  registerChannel(address, null, this._messageHandler);
};