第三个示例通常 不 正确:
EventEmitter为 所有 门实例创建一个实例。
让我们想象一个简单的情况:
var Foo = function() { // each Foo instance has a unique id this.id = Math.random();}Foo.prototype.doFoo = function() { console.log("Foo!"); }假设我们要创建一个
Bar构造函数,该构造函数继承自
Foo并添加一些新属性。如果您遵循最后一个示例:
var Bar = function() { this.something = 5;}Bar.prototype = new Foo();这是错误的,因为所有
Bar实例将具有相同的
id属性。相反,我们必须为每个实例调用父构造函数:
var Bar = function() { Foo.call(this); // set unique `id` on `this` this.something = 5;}Bar.prototype = Object.create(Foo.prototype);请注意,这里的最后一行与相同,
Bar.prototype.__proto__ =Foo.prototype;因为
Object.create创建了一个新对象,该对象
__proto__的
Object.create参数设置为。



