var EventEmitter = {
constructor: function _constructor() {
this._events = [];
return this;
},
on: function _on(ev, handler) {
if (!this._events[ev]) {
this._events[ev] = [];
}
this._events[ev].push(handler);
},
removeListener: function _removeListener(ev, handler) {
if (!this._events[ev]) return;
this._events[ev].splice(this._events[ev].indexOf(handler), 1);
},
removeAll: function _removeAll(ev) {
delete this._events[ev];
},
emit: function _emit(ev, data) {
if (!this._events[ev]) return;
this._events[ev].forEach(invokeHandler);
function invokeHandler(handler) {
handler(data);
}
}
};
У меня есть маленький EventEmitter
, который я использую, когда мне нужны быстрые и грязные пользовательские события.
Единственная разница между моей и вашей реализацией состоит в том, что моя допускает множественные обратные вызовы для одного события.
Для чего-либо серьезного я использую библиотеку событий, такую как EventEmitter2