¿Cómo se debe heredar de EventEmitter en el nodo?

Estaba leyendoeste pequeño artículo entender la herencia deEventEmitter, pero estoy un poco confundido

Él hace esto:

function Door() {
    events.EventEmitter.call(this);
    this.open = function() {
        this.emit('open');
    };
}
Door.prototype.__proto__ = events.EventEmitter.prototype;

https://gist.github.com/chevex/7646362

¿Por qué invoca manualmente el constructor EventEmitter con su propio constructor?this? Además, ¿por qué establece el prototipo de su prototipo de constructor en el prototipo deEventEmitter? Eso es super confuso para mí.

Entonces, alguien en los comentarios sugirió que hiciera esto en su lugar, que parecía más elegante:

function Door() {
    events.EventEmitter.call(this);
    this.open = function () {
      this.emit('open');
    }
}
util.inherits(Door, events.EventEmitter);

https://gist.github.com/chevex/7646447

Esto parece mucho más limpio que el otro, aunque probablemente sea solo porque no entiendo lo que sucede en primera instancia. No me sorprenderia siutil.inherits Está haciendo lo mismo que el primer ejemplo.

El segundo, al menos, tiene un poco de sentido para mí, pero aún no entiendo por qué no hacen esto:

function Door() {
    this.open = function () {
      this.emit('open');
    }
}
Door.prototype = new events.EventEmitter();

https://gist.github.com/chevex/7646524

¿Puede alguien explicarme cuáles son las diferencias entre todos estos enfoques y por qué en los dos primeros invocan?.call(this) sobre elEventEmitter ¿constructor? Omití esa línea mientras probaba los ejemplos y aún funcionaban.

Respuestas a la pregunta(4)

Su respuesta a la pregunta