我只是想知道是什么目的,
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!"
请解释。
答案 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的构造函数一样。