Javascript 这在另一个对象的事件处理程序中发生

Javascript 这在另一个对象的事件处理程序中发生,javascript,Javascript,类A(mine)实现类B(第三方)的事件处理程序。在这些事件处理程序中,我希望访问类A的属性 在类A的处理程序中使用它是不起作用的,因为它引用了类B的作用域 全局变量似乎是唯一的选择。我是否缺少更好的选择?创建一个self或变量,该变量包含对的引用。大概是这样的: var ClassA = function () { var self = this; this.MyProperty1 = 3; self.MyProperty2 = "hello world";

类A(mine)实现类B(第三方)的事件处理程序。在这些事件处理程序中,我希望访问类A的属性

在类A的处理程序中使用它是不起作用的,因为它引用了类B的作用域


全局变量似乎是唯一的选择。我是否缺少更好的选择?

创建一个
self
变量,该变量包含对
的引用。大概是这样的:

var ClassA = function () {
    var self = this;

    this.MyProperty1 = 3;
    self.MyProperty2 = "hello world";

    var ClassB_EventHandler = function () {
        self.MyProperty1;
        self.MyProperty2;
    }

}

您可以在
ClassA
的范围内互换使用
this
self
。在
ClassB
事件处理程序中,需要使用
self
引用
ClassA
属性。

另一个解决方案是将事件处理程序绑定到对象

首先需要向任何函数对象添加
bind
方法。使用此代码:

Function.prototype.bind = function(scope) {
  var func = this;

  return function() {
    return func.apply(scope, arguments);
  }
}
现在,您可以通过以下方式将
类B
事件处理程序注册到
类A
方法:

var a = new A();
var b = new B();

b.registerEvent(a.eventHandlerMethod.bind(a));
这样,在
A.eventHandlerMethod
的代码中对
This
的任何引用都将指向对象
A

如果您需要更深入地了解这些内容,您可以阅读这篇很棒的文章:


另一篇文章:

这应该与原型一起工作吗?我最初试过这个,但似乎不起作用。