看看图上这个网页(mckoss.com),显示
prototype,
constructor,
__proto__一个小的层次结构关系。图下的代码也很好地描述了这种关系。
当您具有一个function
base并设置了所定义的功能对象的原型时,该语句会自动将of
Derived.prototype = newbase;设置为
__proto__(实际上是internal
[[prototype]]),从而使Derived成为可以实例化对象的类。这似乎是定义派生类的一种更加符合标准的方法。
Derived.prototype``base.prototype
据我了解,这
__proto__是访问
[[prototype]]对象内部的一种非标准方式。它似乎得到了很好的支持,但是我不确定是否应该信任它。
无论如何,您的示例
Server.prototype.__proto__ =connect.HTTPServer.prototype;似乎都是通过另一种方式进行推导的:首先
Server通过定义构造函数和原型定义一个对象,然后
[[prototype]]手动将内部连接起来以将其变形为从派生的类
HTTPServer。
至于建议的替代方法,
Server.prototype =connect.HTTPServer.prototype;:那是个坏主意。在这里,您将的原型设置
Server为与的原型相同的对象
HTTPServer。因此,您对
Server类所做的任何更改都将直接反映在中
HTTPServer,并且可以从的其他派生类访问
HTTPServer。如果从两个派生的类
HTTPServer试图定义同一成员,则可以对混乱进行想象。



