Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中扩展类的不同方法_Javascript_Node.js_Inheritance_Eventemitter - Fatal编程技术网

Javascript中扩展类的不同方法

Javascript中扩展类的不同方法,javascript,node.js,inheritance,eventemitter,Javascript,Node.js,Inheritance,Eventemitter,我正在阅读关于在node中扩展EventEmitter类的文章,有一小部分我不理解: Door.prototype.__proto__ = events.EventEmitter.prototype; 我已经查阅了几篇关于这应该如何工作的文章,但我真的不明白。我知道,或者,我也可以使用util.inherits,但我正在试图理解上面这行中发生了什么 我还想知道这样做是否会产生与使用\uuuuu proto\uuuu相同的结果: Door.prototype = Object.create(Ev

我正在阅读关于在node中扩展EventEmitter类的文章,有一小部分我不理解:

Door.prototype.__proto__ = events.EventEmitter.prototype;
我已经查阅了几篇关于这应该如何工作的文章,但我真的不明白。我知道,或者,我也可以使用
util.inherits
,但我正在试图理解上面这行中发生了什么

我还想知道这样做是否会产生与使用
\uuuuu proto\uuuu
相同的结果:

Door.prototype = Object.create(EventEmitter.prototype);
//or
Door.prototype = new EventEmitter(); // I know this also calls constructor
那么,这三种方法的区别是什么,以及
\uuu proto\uu
是如何工作的呢

编辑:

所以我查看了发布的链接。我知道prototype基本上是用来构建
\uuuu proto\uuuu
,然后在查找链中用于解析方法。我链接到的文章还说,这一行将所有EventEmitter属性复制到门对象:

Door.prototype.__proto__ = events.EventEmitter.prototype;
现在,我的问题(之前可能不太清楚)是:如果上面一行的点正在将EventEmitter的属性复制到门对象,我认为通过执行以下操作可以实现同样的效果:

Door.prototype = new EventEmitter();

这一切都是关于对象可以访问什么以及为什么

我们需要理解原型与原型的区别。 我会让你参考这个问题和答案来帮助你理解这两个问题。

您正在查看的代码行是从EventEmitter原型继承的构造函数。这将创建一个链式系统,以包含来自多个构造函数的方法

Door.prototype.open = function(){ ... open something... };
Door.prototype.__proto__ = events.EventEmitter.prototype;
var myDoor = new Door;

对象myDoor将打开方法
和EventEmitter原型中的所有方法。

这个问题的可能重复可能也会有帮助(有一篇好文章的链接),因此如果我理解正确,使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我们可以在初始化后更改
Door.prototype
。但是不能通过使用
Door.prototype=Object.create(EventEmitter.prototype)来实现同样的事情