Last active
September 11, 2018 13:05
-
-
Save mikepuerto/1418a024ab93e1cb353305c9ceadfbde to your computer and use it in GitHub Desktop.
Micro EventEmitter v2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* micro event emitter | |
* @author [email protected] | |
* @gist https://gist.github.com/mikepuerto/1418a024ab93e1cb353305c9ceadfbde | |
*/ | |
class EventEmitter { | |
constructor() { | |
this._eventHandlers = {}; | |
} | |
on(event, callback, once = false) { | |
this._eventHandlers[event] = this._eventHandlers[event] || []; | |
this._eventHandlers[event].push({ callback, once }); | |
} | |
once(event, callback) { | |
this.on(event, callback, true); | |
} | |
off(event, callback) { | |
if (!this._eventHandlers[event]) { | |
return; | |
} | |
this._eventHandlers[event].forEach((eventHandler, idx) => { | |
if (eventHandler.callback === callback) { | |
this._eventHandlers[event].splice(idx, 1); | |
} | |
}); | |
return true; | |
} | |
emit(event, data) { | |
if (!this._eventHandlers[event] || !this._eventHandlers[event].length) { | |
return undefined; | |
} | |
const args = [].slice.call(arguments, 1); | |
this._eventHandlers[event].forEach(handler => { | |
handler.callback.apply(handler.callback, args); | |
handler.once && this.off(event, handler.callback); | |
}); | |
} | |
} | |
export default EventEmitter; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment