我正在学习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);
它在这做什么?
答案 0 :(得分: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。