Javascript 从Node.js中的EventEmitter继承的原型阵列

Javascript 从Node.js中的EventEmitter继承的原型阵列,javascript,arrays,node.js,prototype,eventemitter,Javascript,Arrays,Node.js,Prototype,Eventemitter,我目前正在从事一个项目,需要从EventEmitter继承。我需要一个数组来在某些情况下发出事件,例如,当超过某个长度时 我用了这个片段: var events = require('events'); Array.prototype.__proto__ = events.EventEmitter.prototype; 它工作正常,但据说它是反模式的 在另一种情况下,建议使用: util.inherits(Array, events.EventEmitter.prototype); 但它确实

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

我用了这个片段:

var events = require('events');
Array.prototype.__proto__ = events.EventEmitter.prototype;
它工作正常,但据说它是反模式的

在另一种情况下,建议使用:

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

但它确实不起作用。那么,正确的方法是什么呢?

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

i、 e


不要弄乱本机
数组
。只需在它周围构建一个包装器!如何围绕数组和EventEmitterIt构建一个包装器我添加了一个示例,接下来将提供一个示例代码,说明如何实现这一点。甚至还有一个设计原则,说“委派比继承更好”。我并不总是同意这一点,但是我认为它比这里的多重继承要好得多。我是否必须编写像push这样的方法并将委托映射到数组?这不是很累吗?是的,这就是为什么我不总是同意这个原则;-)。但这对我来说似乎是最好的选择,因为没有多重继承,更改数组的父原型将全局应用(更改所有数组)。这解决了我的问题,尽管方法委派需要时间更新。我接受这个答案。:-)
// 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);