Skip to content

Instantly share code, notes, and snippets.

@sayhicoelho
Last active May 9, 2020 19:06
Show Gist options
  • Save sayhicoelho/25e9c82628de14bf937715c9c004563b to your computer and use it in GitHub Desktop.
Save sayhicoelho/25e9c82628de14bf937715c9c004563b to your computer and use it in GitHub Desktop.
Custom EventEmitter for Javascript
class EventEmitter {
constructor() {
this.listeners = []
}
addListener(event, listener) {
this.listeners.push({ event, listener })
}
removeListener(event, listener) {
this.listeners = this.listeners.filter(l => !(l.event == event && l.listener == listener))
}
removeAllListeners(event = null) {
this.listeners = this.listeners.filter(l => event && l.event != event)
}
emit(event, data) {
this.listeners.filter(l => l.event == event).forEach(l => l.listener(data))
}
}
var eventEmitter = new EventEmitter()
var listener = data => {
console.log({ data })
}
eventEmitter.addListener('onChange', listener)
eventEmitter.emit('onChange', 'Renan')
eventEmitter.removeListener('onChange', listener)
eventEmitter.emit('onChange', 'Coelho')
// { data: 'Renan' }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment