如何在Node中添加对象实例的事件能力?

时间:2014-07-24 04:25:11

标签: node.js events

向构造函数添加事件功能是可以的:

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的内容?

1 个答案:

答案 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);