2014-10-10 1 views
1

Я изучаю node.js. На сайте nodejs api есть фрагмент кода, который я действительно не получаю. Ссылка hereЧто делает события/EventEmitter в функции-конструкторе nodejs

var util = require("util"); 
var events = require("events"); 

function MyStream() { 
    events.EventEmitter.call(this); 
} 

util.inherits(MyStream, events.EventEmitter); 

MyStream.prototype.write = function(data) { 
    this.emit("data", data); 
} 

var stream = new MyStream(); 

console.log(stream instanceof events.EventEmitter); // true 
console.log(MyStream.super_ === events.EventEmitter); // true 

stream.on("data", function(data) { 
    console.log('Received data: "' + data + '"'); 
}) 
stream.write("It works!"); // Received data: "It works!" 

так запутанная часть

events.EventEmitter.call(this); 

Что он делает здесь?

ответ

1

MyStream новая декларация объекта, который наследует поведение от events.EventEmitter, как можно видеть из этой строки, в которой настроено наследование:

util.inherits(MyStream, events.EventEmitter); 

Итак, когда MyStream конструктор вызывается, как правило, через что-то вроде var stream = new MyStream();, это необходимо также вызвать конструктор объекта, который он наследует, поэтому родительский объект может инициализировать себя должным образом. Именно эта линия:

events.EventEmitter.call(this); 

events.EventEmitter является конструктор объекта, который MyStream наследует от. events.EventEmitter.call(this) инструктирует Javascript для вызова этого конструктора с указателем this, установленным на this объект.

Если вам нужна дополнительная помощь с пониманием .call(), вы можете прочитать this MDN reference.

+0

Спасибо! Кажется, я понял это сейчас. – Slimpothive