我正在学习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);
它在这里做什么?
最佳答案
MyStream
是一个新的对象声明,它继承了 events.EventEmitter
的行为,从配置继承的这一行可以看出:
util.inherits(MyStream, events.EventEmitter);
因此,当通常通过诸如 var stream = new MyStream();
之类的方式调用 MyStream
构造函数时,它还需要调用它继承的对象的构造函数,以便父对象可以正确初始化自身。这就是这一行:
events.EventEmitter.call(this);
events.EventEmitter
是 MyStream
继承的对象的构造函数。 events.EventEmitter.call(this)
指示 Javascript 调用该构造函数,并将 this
指针设置为 this
对象。
如果您需要更多帮助来理解 .call()
,您可以阅读 this MDN reference .
关于node.js - events/EventEmitter在nodejs构造函数中做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309063/