从Node.js中的EventEmitter继承的原型数组

Prototyping Array to inherit from EventEmitter in Node.js

本文关键字:原型 数组 继承 EventEmitter Node js 中的      更新时间:2023-09-26

我目前在一个项目中工作,我需要从EventEmitter继承。我需要一个数组在某些情况下发出事件,例如,当超过某个长度时。

我使用了这个代码片段:

var events = require('events');
Array.prototype.__proto__ = events.EventEmitter.prototype;

工作正常,但是据说它是反模式

在另一个问题中,建议使用:

util.inherits(Array, events.EventEmitter.prototype);

但是NOT工作。那么正确的方法是什么呢?

这里的问题是,这将改变应用程序中的所有数组,而不仅仅是一个。在这种情况下,最好使用从EventEmitter扩展并委托给Array的新Type。

// Create a new object that ...
function MyEventArray() {
    // ...owns an Array as property...
    this.array = new Array();
}
// ... and extends from EventEmitter...
MyEventArray.prototype = Object.create(EventEmitter.prototype);
MyEventArray.prototype.constructor = MyEventArray;
// ... and has functions that delegate to the array.
MyEventArray.prototype.push(obj) {
    this.array.push(obj);
}
...

// This object is an EventEmitter and can be used like an Array:
var myArray = new MyEventArray();
myArray.push(someStuff);