0

我只是想知道这样做的目的是什么,

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

请解释。

4

1 回答 1

1

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

布拉德利·梅克的名言:

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

于 2012-05-24T14:11:38.740 回答