将以下内容视为一种继承更为常见:
function A() {}
function B() {}
B.prototype = A.prototype;
但以下是否合适?如果是这样,对于什么用例?
function A() {}
function B() {}
B.prototype = new A();
答案 0 :(得分:1)
在第一个B.prototype = A.prototype;
中,您将它们设为同一个对象,因此对A的更改也会更改B.
第二个B.prototype = new A();
是如何通过使B成为A的实例来继承原型。
答案 1 :(得分:1)
第一种情况很不寻常。实例和B实例将具有完全相同的继承层次结构。它等同于为同一个类提供两个不同的构造函数。
我认为第二种用法更为典型。例如,当您使用util.inherits时,它几乎就是Node.js所做的。
现代JS(ES6)的更新:
您不应该使用new A()
,而应使用Object.create(A.prototype)
。当您使用new A()
时,会发生一些您 想要的事情:即使没有A
或{{A
,您也会全局调用B
构造函数1}}实例永远被创建。您应该已经在A
构造函数中调用B
父构造函数。召唤一个额外的时间毫无意义,有时可能无法按预期工作。
答案 2 :(得分:0)
还有其他答案,但有一个原因可能是:
function A() {}
function B() {}
function C() {}
B.prototype = new A();
C.prototype = new A();