javascript - 如何在javascript中继承2个类

标签 javascript

我有 A 类和 B 类。我想使用 C 类继承这两个类。对于 A 类,我使用以下代码 -

对于单类来说效果很好。现在我想继承B类。

function A () {
}

function B () {
}

function C () {
}

B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

现在C如何继承A?

//B.prototype = Object.create(A.prototype);
//B.prototype.constructor = B;

最佳答案

一个对象只有一个单个原型(prototype)链。除非 A.prototypeB.prototype 之间存在关系,否则它们不能都位于单个对象的原型(prototype)链上。

您可以创建一个包含A.prototypeB.prototype 组合的新对象,并将其用作C.prototype 的对象:

function C() {
    A.call(this);
    B.call(this);
}
C.prototype = Object.assign({}, A.prototype, B.prototype); // Object.assign is
                                                           // ES2015, but can be
                                                           // shimmed
C.prototype.constructor = C;

...但请注意:

  1. 如果您之后在 A.prototypeB.prototype 上添加/删除内容,这些更改将不会反射(reflect)在 C.prototype 或在通过 new C 创建的实例上。
  2. instanceof 不会将通过 new C 创建的对象视为 instanceof Ainstanceof B 因为 A.prototypeB.prototype 不在其原型(prototype)链中。
  3. 如果 A.prototypeB.prototype 都具有相同的属性(例如,它们可能都覆盖了 toString),您可以只有一个。 (在上面的代码中,B.prototype 会获胜。)

关于javascript - 如何在javascript中继承2个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934152/

相关文章:

javascript - 如何在 jQuery 中包装 div?

php - 使用 htaccess 将 php 函数和一些文本添加到数百个 .htm 文件中?这行得通吗?

Javascript正则表达式-在两个字符之间逐个字符串分割字符串

javascript - 如何保存动态级联下拉列表的结果?

javascript - 如何使用 Angular JS 更新表中的值

javascript - 行与行之间有空格会影响javascript代码的性能吗

javascript - 从 JavaScript 中的字符串中提取值

每次打开模态时,模态中的 JavaScript 都会重复

javascript - 使用 registerstartupscript 时出现意外标识符

c# - 在aspx.cs中创建onclick函数的c#代码