node.js - events/EventEmitter在nodejs构造函数中做什么

标签 node.js api constructor eventemitter

我正在学习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.EventEmitterMyStream 继承的对象的构造函数。 events.EventEmitter.call(this) 指示 Javascript 调用该构造函数,并将 this 指针设置为 this 对象。

如果您需要更多帮助来理解 .call(),您可以阅读 this MDN reference .

关于node.js - events/EventEmitter在nodejs构造函数中做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26309063/

相关文章:

java - 子类化泛型 - 构造函数继承

c++ - 为什么当对象的构造函数抛出异常时不调用对象的析构函数?

javascript - 打开 Websocket 之前进行身份验证

laravel - OAuth2 密码授予混淆

javascript - 如何知道查询中缺少哪些参数?

用于租户隔离的 API 流量整形/throttle 策略

c++ - 构造对象两次

javascript - NodeJS中的 'global'对象是什么

macos - Socket.io:如何处理关闭连接?

javascript - 在 NodeJS 中下载文件