Try   HackMD

Javascript Custom event emitter

tags: JavaScript

Create Custom Event Emitter with javascript

class EventEmitter { constructor() { this._events = {}; } on(name, listener) { if (!this._events[name]) { this._events[name] = []; } this._events[name].push(listener); } delete(name) { if (this._events[name]) { delete this._events[name]; } } 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.`); } this._events[name].forEach(callback => callback(data)); } } let ev = new EventEmitter(); ev.on("hello", val => { console.log("event from emiiter ", val); }); const handleMyEvent = data => { console.log("Was fired: ", data); }; ev.emit("hello", { name: "shri" }, handleMyEvent); // ev.delete("hello"); ev.emit("hello", { name: "shri" }, handleMyEvent);

Demo link