构造函数内部的订阅

时间:2011-12-16 01:34:04

标签: javascript oop design-patterns observer-pattern

这个问题与JavaScript有关,但我认为它适用于任何语言。

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

function Obj() {
    //instance variables

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

问题是现在我觉得这个对象与发布者有关;我想如果我可以以某种方式订阅对象本身之外。不幸的是,我不知道何时或何地可以初始化此对象的新实例。我想过制作一个“attachEvents”成员函数,但是只要在构造函数中创建或调用新实例就必须调用该函数,但这可能是最佳实践吗?它至少可以使单元测试变得更容易。

我只是在寻找一些建议;什么都赞赏!

1 个答案:

答案 0 :(得分:2)

function Constructor(eventEmitter) {
    /* code */
    this.listenTo(eventEmitter);
}

Constructor.prototype.listenTo = listenTo;

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

或者更确切地说,然后将eventEmitter传递给构造函数,构造函数可以从eventemitter继承并且本身就是一个。

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