【问题标题】:Subscriptions inside constructors构造函数内的订阅
【发布时间】:2011-12-16 01:34:04
【问题描述】:

这个问题专门与 JavaScript 相关,但我想它适用于任何语言。

我是 OOP 的新手,我只是想看看是否有最佳实践/更好的方法来做到这一点。我有一个需要订阅某些事件的对象。我将事件订阅放在对象构造函数中,如下所示:

function Obj() {
    //instance variables

    outsideEvent.addHandler(function(response) {
        //do stuff
    });
}

问题是现在我觉得对象与发布者耦合了;我想如果我能以某种方式在对象本身之外订阅。不幸的是,我不知道何时何地初始化该对象的新实例。我考虑过创建一个“attachEvents”成员函数,但是每当在构造函数中创建或调用新实例时都必须调用该函数,但这也许是最佳实践?它至少会使单元测试更容易。

我只是在寻找一些建议;任何事情都值得赞赏!

【问题讨论】:

  • 如果您正在寻找一种更加解耦的方法,那么我想您可能会对weak event pattern 感兴趣
  • 我不知道这种模式;谢谢!

标签: javascript oop design-patterns observer-pattern


【解决方案1】:
function Constructor(eventEmitter) {
    /* code */
    this.listenTo(eventEmitter);
}

Constructor.prototype.listenTo = listenTo;

function listenTo(eventEmitter) {
    /* bind events */
}

或者将 eventEmitter 传递给您的构造函数,您的构造函数可以从 eventemitter 继承并成为一个本身。

这意味着它可以自己监听。然后,您将在其上发布事件,而不是一些外部 eventEmitter。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多