Javascript 这在另一个对象的事件处理程序中发生
类A(mine)实现类B(第三方)的事件处理程序。在这些事件处理程序中,我希望访问类A的属性 在类A的处理程序中使用它是不起作用的,因为它引用了类B的作用域Javascript 这在另一个对象的事件处理程序中发生,javascript,Javascript,类A(mine)实现类B(第三方)的事件处理程序。在这些事件处理程序中,我希望访问类A的属性 在类A的处理程序中使用它是不起作用的,因为它引用了类B的作用域 全局变量似乎是唯一的选择。我是否缺少更好的选择?创建一个self或变量,该变量包含对的引用。大概是这样的: var ClassA = function () { var self = this; this.MyProperty1 = 3; self.MyProperty2 = "hello world";
全局变量似乎是唯一的选择。我是否缺少更好的选择?创建一个
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
如果您需要更深入地了解这些内容,您可以阅读这篇很棒的文章:
另一篇文章:这应该与原型一起工作吗?我最初试过这个,但似乎不起作用。