Javascript Nodejs:我的eventEmitter不会从其构造函数内部发出事件

Javascript Nodejs:我的eventEmitter不会从其构造函数内部发出事件,javascript,node.js,events,prototypal-inheritance,eventemitter,Javascript,Node.js,Events,Prototypal Inheritance,Eventemitter,我在Nodejs中使用自定义事件发射器时遇到一些问题。我非常确定我已经正确地创建了eventemitter,因为我可以在它的实例上激发和捕获事件 但是,它的构造函数中没有任何事件被激发。它们似乎都存在并且正在正确注册侦听器,但是this.emit函数没有任何作用 为清楚起见,这里有一个最小的失败示例: var EventEmitter = require("events").EventEmitter, util = require("util"); var MyEmitter = fu

我在Nodejs中使用自定义事件发射器时遇到一些问题。我非常确定我已经正确地创建了eventemitter,因为我可以在它的实例上激发和捕获事件

但是,它的构造函数中没有任何事件被激发。它们似乎都存在并且正在正确注册侦听器,但是this.emit函数没有任何作用

为清楚起见,这里有一个最小的失败示例:

var EventEmitter = require("events").EventEmitter,
    util = require("util");

var MyEmitter = function() {
    var self = this;
    EventEmitter.call(this);

    someExternalFunction(function callback() {
        self.emit("event 1"); // Does not fire
        console.log("fires");
    });   

    this.emit("event 2"); // Does not fire

    return this;
};

util.inherits(Browser,EventEmitter);

var myEmitterInstance = new MyEmitter();

myEmitterInstance.emit("event 3");  // fires

myEmitterInstance.on("event 1 - does not fire", function () {

//Do something with the results of someExternalFunction.

} // this function never runs.

我不明白我做错了什么。

您实际上在哪里附加这些事件处理程序?您的问题可能是您在代码添加侦听器之前触发了事件。在构建事件发射器之前,如何为其注册侦听器?那么,如果没有人有机会订阅构造函数,那么在构造函数中发出事件又有什么意义呢?我添加了一些代码来说明我是如何监听事件的。someExternalFunction实际上正在旋转一个phantomjs实例,事件在它的回调中被触发。通过日志语句,我已经看到在phantomjs结束旋转之前,监听器下面编写的代码就启动了。另一方面,你们两个都提出了我确实应该事先考虑的宝贵观点。@loganfsmyth谢谢,这条评论帮助我找到了一种有效的代码排列方式。我很乐意接受你的回答。