向构造函数添加事件功能是可以的:
function Stream() {
events.EventEmitter.call(this);
}
util.inherits(Stream, events.EventEmitter);
但是如何将事件能力添加到对象实例?以下代码不起作用:
var foo = {x: 1, y: 2};
util.inherits(foo, event.EventEmitter);
events.EventEmitter.call(foo);
运行上述代码后,foo.on
仍为undefined
。
有没有办法继承或混合使用EventEmitter的内容?
答案 0 :(得分:3)
您可以使用npm模块node.extend
。
它是jQuery的$.extend
的一个端口,有了它,你可以这样做:
var extend = require('node.extend'),
events = require('events');
extend(foo, events.EventEmitter.prototype);
或者,如果您不想使用其他模块,可以使用:
function extend(target) {
var sources = Array.prototype.slice.call(arguments, 1);
return sources.forEach(function (source) {
Object.keys(source).forEach(function (key) {
target[key] = source[key];
});
}), target;
}
var events = require('events');
var foo = {x: 1, y: 2};
extend(foo, events.EventEmitter.prototype);