2011-12-16 3 views
1

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

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

function Obj() { 
    //instance variables 

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

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

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

+1

Если вы ищете более несвязанный подход, я думаю, вас может заинтересовать шаблон [слабый случай] (http://msdn.microsoft.com/en-us/library/aa970850.aspx) – Matthias

+0

я не знал об этом шаблоне; благодаря! – tau

ответ

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

Constructor.prototype.listenTo = listenTo; 

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

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

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

+0

Я рассматриваю возможность сделать что-то подобное; благодаря! – tau

Смежные вопросы