见下面的例子。我试图在a
上触发一个事件。
var events = require("events");
function foo() {
this.on("ping", function() {
console.log("bar!");
})
}
foo.prototype = new events.EventEmitter();
var a = new foo();
var b = new foo();
a.emit("ping");
这打印“吧!”两次,所以我假设我在“所有”函数上添加事件监听器,而不是特定实例。由于我正在运行foo两次,我正在添加两个事件监听器,真的没什么奇怪的,尽管不那么直观。
有没有办法只在a
上添加事件监听器?
(如果我使用错误的术语,用于基于类的编程,请编辑此问题)
编辑所以我怀疑这是因为我使用相同的事件发射器作为原型..但在这种情况下,我如何为每个新的foo()创建一个?
答案 0 :(得分:1)
通常你会继承(来自EventEmitter):
var inherits = require('util').inherits,
EventEmitter = require('events').EventEmitter;
function Foo() {
if (!(this instanceof Foo))
return new Foo();
EventEmitter.call(this);
this.on('ping', function() {
console.log('bar!');
});
}
inherits(Foo, EventEmitter);
// add Foo-specific prototype functions *after* `inherits()`
Foo.prototype.myfunc = function(a, b) {
return a + b;
});
var a = new Foo();
var b = new Foo();
a.emit('ping');
这是npm上的大多数模块和节点核心中的对象用来从另一个对象继承的设置。