Skip to content

Instantly share code, notes, and snippets.

@sanjayabc1234
Forked from oleh-zaporozhets/MyEventEmitter.js
Created October 14, 2020 16:40
Show Gist options
  • Save sanjayabc1234/390958381b55d94c839288057804cd66 to your computer and use it in GitHub Desktop.
Save sanjayabc1234/390958381b55d94c839288057804cd66 to your computer and use it in GitHub Desktop.
class MyEventEmitter {
constructor() {
this._events = {};
}
on(name, listener) {
if (!this._events[name]) {
this._events[name] = [];
}
this._events[name].push(listener);
}
removeListener(name, listenerToRemove) {
if (!this._events[name]) {
throw new Error(`Can't remove a listener. Event "${name}" doesn't exits.`);
}
const filterListeners = (listener) => listener !== listenerToRemove;
this._events[name] = this._events[name].filter(filterListeners);
}
emit(name, data) {
if (!this._events[name]) {
throw new Error(`Can't emit an event. Event "${name}" doesn't exits.`);
}
const fireCallbacks = (callback) => {
callback(data);
};
this._events[name].forEach(fireCallbacks);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment