паттерн наблюдатель
Хотелось бы выслушать объективную критику по поводу реализации паттерна "наблюдатель"
выставляю основной класс. тудухи в комментах можно считать вопросами. спасибо! /** * класс "наблюдатель" реализующий работу с кастомными событиями * @todo подумать над названием класса * @todo решить проблему с пространством имен Н: событие switchTab может быть у разных объектов */ function observer() { this.events = new Array(); /** * добавляет наблюдателя * @param {string} objName имя объекта наблюдателя * @param {string} eventName событие которое отслеживаем */ this.addObserver = function(objName, eventName) { if (!this.events[eventName]) { this.events[eventName] = new Array(); } this.events[eventName].push(objName) } /** * оповещает всех наблюдателей о произошедшем событии * @param {string} eventName название события */ this.fireEvent = function(eventName) { var f = eventName.charAt(0).toUpperCase(); var eventNameUpperFirst = f + eventName.substr(1, eventName.length-1); for(var i = 0; i < this.events[eventName].length; i++) { window[this.events[eventName][i]]['on' + eventNameUpperFirst](); } } /** * удаляет наблюдателя * @param {string} objName имя объекта наблюдателя * @param {string} eventType событие которое отслеживаем */ this.removeObserver = function(objName, eventType) { for(var i = 0; i < this.events[eventName].length; i++) { if (this.events[eventName][i] == objName) { this.events[eventName][i] = null; } } } } var observer = new observer(); |
Цитата:
Цитата:
Цитата:
Я не понял, только глобальные функции можно обработчиками сделать чтоли? |
Kolyaj,
Цитата:
Цитата:
Цитата:
Цитата:
window[this.events[eventName][i]]['on' + eventNameUpperFirst](); |
Часовой пояс GMT +3, время: 21:19. |