Подписки внутри конструкторов - PullRequest
1 голос
/ 16 декабря 2011

Этот вопрос относится конкретно к JavaScript, но я думаю, что он применим к любому языку.

Я новичок в ООП, и я просто смотрю, есть ли лучшая практика / лучший способ сделать это,У меня есть объект, который должен подписаться на некоторые события.Я помещаю подписки на события в конструктор объектов, например:

function Obj() {
    //instance variables

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

Проблема в том, что теперь я чувствую, что объект связан с издателем;Я хотел бы, если бы я мог как-то подписаться за пределами самого объекта.К сожалению, я не знаю, когда и где может быть инициализирован новый экземпляр этого объекта.Я думал о создании функции-члена "attachEvents", но эта функция должна вызываться всякий раз, когда создается новый экземпляр или вызывается в конструкторе, но, может быть, это лучший метод?По крайней мере, это облегчит юнит-тестирование.

Я просто ищу совет;все ценится!

1 Ответ

2 голосов
/ 16 декабря 2011
function Constructor(eventEmitter) {
    /* code */
    this.listenTo(eventEmitter);
}

Constructor.prototype.listenTo = listenTo;

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

В качестве альтернативы, вместо передачи eventEmitter в ваш конструктор, ваш конструктор может наследовать от eventemitter и быть единым целым.

Это означает, что он может прослушивать себя.Затем вы будете публиковать на нем события, а не какой-нибудь внешний eventEmitter.

...