Должен бросить свой собственный. Вот только один способ.
var MyClass = function() {
this._events = {};
};
MyClass.prototype = {
addListener: function(eventName, callback) {
var events = this._events,
callbacks = events[eventName] = events[eventName] || [];
callbacks.push(callback);
},
raiseEvent: function(eventName, args) {
var callbacks = this._events[eventName];
for (var i = 0, l = callbacks.length; i < l; i++) {
callbacks[i].apply(null, args);
}
},
test : function() {
this.raiseEvent('ON_TEST', [1,2,3]); // whatever args to pass to listeners
}
};
Вам, вероятно, также следует добавить 'removeListener', который должен был бы найти обратный вызов в массиве и удалить его из массива (или, возможно, удалить все прослушиватели для всего события, если обратный вызов не задан).