events / EventEmitter在nodejs构造函数中做了什么

时间:2014-10-10 22:40:18

标签: node.js api constructor eventemitter

我正在学习node.js.在nodejs api网站上有一段我不太了解的代码。 链接为here

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 个答案:

答案 0 :(得分:1)

MyStream是一个新的对象声明,它继承了events.EventEmitter的行为,从配置继承的这一行可以看出:

util.inherits(MyStream, events.EventEmitter);

因此,当MyStream构造函数通常通过像var stream = new MyStream();之类的东西调用时,它还需要调用它继承的对象的构造函数,这样父对象就可以正确地初始化它自己。这就是这条线:

events.EventEmitter.call(this);

events.EventEmitterMyStream继承的对象的构造函数。 events.EventEmitter.call(this)指示Javascript调用该构造函数,并将this指针设置为this对象。

如果您需要更多帮助来理解.call(),可以阅读this MDN reference