Javascript 在同一个类中调用EventEmitter两次?

Javascript 在同一个类中调用EventEmitter两次?,javascript,node.js,oop,events,module,Javascript,Node.js,Oop,Events,Module,我目前正在阅读NodeJS中的EventEmitter。以下是该教程中的一个示例: var events = require('events'); function Door(colour) { this.colour = colour; events.EventEmitter.call(this); this.open = function() { this.emit('open'); } } Door.prototype.__proto__ = events.E

我目前正在阅读NodeJS中的
EventEmitter
。以下是该教程中的一个示例:

var events = require('events');

function Door(colour) {
  this.colour = colour;
  events.EventEmitter.call(this);

  this.open = function()
  {
  this.emit('open');
  }
}

Door.prototype.__proto__ = events.EventEmitter.prototype;

var frontDoor = new Door('brown');

frontDoor.on('open', function() {
    console.log('ring ring ring');
  });
frontDoor.open();
有些事我不明白。在第5行,我们调用EventEmitter。如果我没弄错的话,这允许我们以后做类似的事情:

var myDoor = new Door('green');
myDoor.on('open', ...);
所以基本上它允许直接从
Door
类的实例中使用属于
EventEmitter
类的方法,对吗

但是,第13行代码(
Door.prototype.\uuu proto\uuu=events.EventEmitter.prototype;
)的目的是什么?这将
EventEmitter
的属性复制到
Door
类。但是,
调用
方法不是已经完成了吗

我想我错过了什么。。。我希望你能帮助我理解所有这些事情


谢谢。

调用构造函数允许您使用父函数并将子实例替换为该。这允许进行任何初始化,但不会将父函数的原型添加到子函数中。下面是一个简单的例子:

函数父级(名称){
this.name=name
this.somProp=“某些道具用于”+名称
}
Parent.prototype.test=函数(){
console.log(this.name,“testing”)
}
//使用父项:
设p=新父级(“父实例”)
p、 测试()
函数子项(名称){
//调用父构造函数将“.somProp”放在实例上
Parent.call(此,名称)
}
设c=新子女(“c”)
//子实例具有somProp,因为我们调用了父构造函数
控制台日志(c)
//但这是一个错误//
//因为它没有继承原型//

c、 test()。分配原型可以让你调用它的函数,但当它们试图访问实例的属性时,它们会失败,因为你没有执行构造函数,所以该属性从未初始化过。正在键入类似于@Bliglenuber的解释(我不打算给出答案,因为我对Node的了解还很粗略,而且我从来没有听说过
EventEmitter
)。如果您熟悉其他语言中的OOP,我想补充一点,那就是调用
OtherFunction.call(this)
函数
MyFunction
(假设两者都是“构造函数”)本质上是基于原型的,相当于
MyFunction
是一个“子类”在子类的构造函数中调用
OtherFunction
super
。为什么不使用ES6语法定义一个新类并从
EventEmitter
继承呢?这样更简单。谢谢你的回答!这很简单,我终于(真正)理解了
call()
函数的功能。