I see this pattern in quite a few Node.js libraries:
Master.prototype.__proto__ = EventEmitter.prototype;
(source here)
Can someone please explain to me with an example, why this is such a common pattern and when it's handy?
As the comment above that code says, it will make Master
inherit from EventEmitter.prototype
, so you can use instances of that 'class' to emit and listen to events.
For example you could now do:
masterInstance = new Master();
masterInstance.on('an_event', function () {
console.log('an event has happened');
});
// trigger the event
masterInstance.emit('an_event');
Update: as many users pointed out, the 'standard' way of doing that in Node would be to use 'util.inherits':
var EventEmitter = require('events').EventEmitter;
util.inherits(Master, EventEmitter);
These come straight from the docs, but I figured it'd be nice to add them to this popular question for anyone looking.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {
constructor() {
super(); //must call super for "this" to be defined.
}
}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('an event occurred!');
});
myEmitter.emit('event');
I'd like to git thank
whoever added that. Event Emitter.
Note: The documentation does not call super()
in the constructor which will cause this
to be undefined. See this issue.