作者:婷518婷_239 | 来源:互联网 | 2024-11-14 16:52
在Node.js中,第三个示例通常 不 是正确的做法:EventEmitter
为 所有 实例创建一个共享的事件实例。
让我们通过一个简单的例子来理解这个问题:
var Foo = function() {
// 每个 Foo 实例都有一个唯一的 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
属性。为了确保每个实例都有唯一的 id
,我们需要在每个实例化过程中调用父构造函数:
var Bar = function() {
Foo.call(this); // 在当前实例上设置唯一的 `id`
this.something = 5;
}
Bar.prototype = Object.create(Foo.prototype);
请注意,这里的最后一行与 Bar.prototype.__proto__ = Foo.prototype;
相同,因为 Object.create
创建了一个新对象,其 __proto__
被设置为 Object.create
的参数。
通过这种方式,我们可以确保每个 Bar
实例都正确地继承了 Foo
的属性和方法,并且每个实例都有唯一的 id
。