一尘不染

Node.js-从EventEmitter继承

node.js

我在许多Node.js库中看到了这种模式:

Master.prototype.__proto__ = EventEmitter.prototype;

在这里获得

有人可以举个例子给我解释一下,为什么这是一种常见的模式,什么时候方便?


阅读 487

收藏
2020-07-07

共1个答案

一尘不染

就像该代码上面的注释所言,它将Master继承自EventEmitter.prototype,因此您可以使用该“类”的实例来发出和侦听事件。

例如,您现在可以执行以下操作:

masterInstance = new Master();

masterInstance.on('an_event', function () {
  console.log('an event has happened');
});

// trigger the event
masterInstance.emit('an_event');

更新 :正如许多用户指出的那样,在Node中执行此操作的“标准”方法是使用“ util.inherits”:

var EventEmitter = require('events').EventEmitter;
util.inherits(Master, EventEmitter);

第二次更新 :随着我们对ES6类的关注,建议立即扩展EventEmitter该类:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

myEmitter.on('event', () => {
  console.log('an event occurred!');
});

myEmitter.emit('event');

请参阅https://nodejs.org/api/events.html#events_events

2020-07-07