node-event-handler
Version:
A generic Node.js style event handler as a class property
30 lines (25 loc) • 999 B
JavaScript
class NodeEventHandler {
constructor (ctx, ee) {
if (!ctx) throw new Error('NodeEventHandler: A context is required.')
this.ctx = ctx
this.boundHandlers = {}
if (ee) this.addEventListeners(ee)
};
get events () {
return (
this._events ||
Object.defineProperty(this, '_events', {
value: Object.getOwnPropertyNames(this.ctx.constructor.prototype)
.filter(type => /^on/.test(type))
.map(type => type.slice(2))
})._events
)
};
handleEvent (eventType) {
if (!this.boundHandlers[eventType]) this.boundHandlers[eventType] = (this.ctx['on' + eventType]).bind(this.ctx)
return this.boundHandlers[eventType]
}
addEventListeners (ee) { for (let events = this.events, i = events.length; i--; ee.on(events[i], this.handleEvent(events[i]))); };
removeEventListeners (ee) { for (let events = this.events, i = events.length; i--; ee.off(events[i], this.handleEvent(events[i]))); };
}
module.exports = NodeEventHandler