Node JS:请求代码段解释

时间:2012-05-24 13:58:05

标签: node.js

我只是想知道是什么目的,

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

在以下Nodejs.org Docs部分的代码块中,

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!"

请解释。

1 个答案:

答案 0 :(得分:1)

这不是第一次提出这个问题:https://groups.google.com/forum/#!topic/nodejs/ab_Xih1L5R8/discussion

Bradley Meck引用:

在对象上使用EventEmitter.call将设置EventEmitter的实例方法/属性(未继承)。它的目的与Java中的super(...)或C#中的base(...)相似,但它并不隐含在Javascript中。因此,我们必须自己手动调用它。至于关于util.inherits的讨论,这将使MyStream函数继承自另一个原型函数,以便instanceof工作(旁注:javascript只允许单继承)。由于new运算符的工作原理,如果我们在一个函数中将this变量设置为一个instanceof EventEmitter,并调用EventEmitter.call它会查找所有意图和目的,就好像在我们的MyStream对象上调用了EventEmitter的构造函数一样。