Используйте управляемый событиями подход или шаблон проектирования наблюдателя.Javascript имеет одну из гибких событийно-ориентированных реализаций из моего опыта.Таким образом, у вас есть объект Timer, который на самом деле не должен знать ни о каких других объектах.Когда вы вызываете Timer.start (), объект должен генерировать пользовательское событие, например «timerStarted», аналогично для других методов:
Timer.stop() - > emits "timerStoped"
Timer.timeExpired() -> emits "timerExpired"
Для каждого события, вызванного Timer, должно быть событиеобработчик, который будет вызываться при запуске события coresponding.
Если вы используете jquery, обработка событий должна быть тривиальной:
var $ = jQuery.noConflict();
var timer = new Timer();
var game = new Game();
$(timer).bind('timerStarted', function(e) {
game.doSomething();
});
в Timer :: start (), который вы должны написать:
start: function() {
$(this).trigger('timerStarted');
}
Другой подход заключается в использовании обратных вызовов: если вы хотите, чтобы что-то было сделано при запуске таймера, вы можете передать лямбда-функцию методу запуска таймера:
// timer method
start: function(callback) {
if(typeof(callback) == 'function') {
callback();
}
}
// main logic
var timer = new Timer();
var game = new Game();
timer.start(function() {
game.doSomething();
});
Надеюсь, вы получите идею