Javascript 将原型设置为另一个构造函数的实例是否合适?

Javascript 将原型设置为另一个构造函数的实例是否合适?,javascript,inheritance,Javascript,Inheritance,更常见的情况是将以下内容视为一种继承: function A() {} function B() {} B.prototype = A.prototype; 但下面的说法是否恰当?如果是,针对哪些用例 function A() {} function B() {} B.prototype = new A(); 第一个B.prototype=A.prototype,使它们成为相同的对象,因此对A的更改也将更改B。 第二个B.prototype=newa()是通过将B作为A的实例来实现原型继承的

更常见的情况是将以下内容视为一种继承:

function A() {}
function B() {}
B.prototype = A.prototype;
但下面的说法是否恰当?如果是,针对哪些用例

function A() {}
function B() {}
B.prototype = new A();

第一个
B.prototype=A.prototype,使它们成为相同的对象,因此对A的更改也将更改B。

第二个
B.prototype=newa()
是通过将B作为A的实例来实现原型继承的方法。

还有其他答案,但其中一个原因可能是:

function A() {}
function B() {}
function C() {}

B.prototype = new A();
C.prototype = new A();

第一个病例是不寻常的。A实例和B实例将具有完全相同的继承层次结构。这相当于为同一个类使用两个不同的构造函数

我认为第二种用法更为典型。例如,当您使用util.inherits时,Node.js所做的就是这样

现代JS(ES6)的更新:

您不应该使用
newa()
,而应该使用
Object.create(A.prototype)
。当您使用
newa()
时,会发生一些您不希望发生的事情:您全局调用
A
构造函数一次,即使没有创建
A
B
实例。您应该已经在
B
构造函数中调用了
A
父构造函数。要求额外的时间是没有意义的,有时可能不会像预期的那样工作