我已将问题解决回以下代码:
var EventEmitter = require("events").EventEmitter,
util = require('util');
function Foo() {
EventEmitter.call(this);
}
util.inherits(Foo, EventEmitter);
Foo.prototype.on('hello', function() {
console.log("World");
});
Foo.prototype.start = function() {
console.log('Hello');
this.emit('hello');
}
var foo = new Foo();
foo.start();

使用Node v0.10.36,此代码输出:
您好 世界
但是使用Node v0.12.1代码输出:
您好
似乎侦听器不再在更高版本的Node中运行。
这是导出/需要的模块的一部分,因此我试图让侦听器远离模块的实例。
任何人都可以解释为什么停止工作,建议的方法是什么。
答案 0 :(得分:2)
您无法像原先那样在原型上放置.on()
处理程序。您对象的EventEmitter
部分甚至不知道它,并且没有向EventEmitter
基础对象注册事件处理程序。
相反,您需要在实例化对象后安装事件处理程序,以便EventEmitter
有机会实际注册事件处理程序。
var EventEmitter = require("events").EventEmitter,
util = require('util');
function Foo() {
EventEmitter.call(this);
this.on('hello', function() {
console.log("World");
});
}
util.inherits(Foo, EventEmitter);
Foo.prototype.start = function() {
console.log('Hello');
this.emit('hello');
}
var foo = new Foo();
foo.start();
仅供参考,我在自己的计算机上在节点v0.12.2上测试了这个脚本并生成了输出:
Hello
World
就个人而言,我不知道它是如何在之前版本的node.js上运行的,因为你的代码根本就没有注册任何事件处理程序。因此,我无法解释您问题的这一部分,但此代码建议适用于node.js的两个版本。