【问题标题】:What does events/EventEmitter do in a nodejs constructor function事件/EventEmitter 在 nodejs 构造函数中做了什么
【发布时间】:2014-10-10 22:40:18
【问题描述】:

我正在学习 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);

它在这里做什么?

【问题讨论】:

    标签: node.js api constructor eventemitter


    【解决方案1】:

    MyStream 是一个新的对象声明,它继承了 events.EventEmitter 的行为,从配置继承的这一行可以看出:

    util.inherits(MyStream, events.EventEmitter);
    

    因此,当MyStream 构造函数通常通过var stream = new MyStream(); 之类的方式调用时,它还需要调用它继承自的对象的构造函数,以便父对象可以正确初始化自身。这就是这条线:

    events.EventEmitter.call(this);
    

    events.EventEmitterMyStream 继承自的对象的构造函数。 events.EventEmitter.call(this) 指示 Javascript 调用该构造函数,并将 this 指针设置为 this 对象。

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

    【讨论】:

    • 谢谢!我想我现在明白了。
    猜你喜欢
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多