1. ホーム
  2. node.js

[解決済み] Node.js - EventEmitterの継承

2023-02-16 10:28:17

質問

Node.jsのライブラリで、このパターンをよく見かけます。

Master.prototype.__proto__ = EventEmitter.prototype;

(ソース ここで )

なぜこのようなよくあるパターンで、どんなときに便利なのか、誰か例を挙げて説明していただけませんか?

どのように解決するのですか?

このコードの上のコメントにあるように、このコードで 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);

2回目の更新 : ES6 クラスの導入に伴い、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