我有 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.prototype
和 B.prototype
之间存在关系,否则它们不能都位于单个对象的原型(prototype)链上。
您可以创建一个包含A.prototype
和B.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;
...但请注意:
- 如果您之后在
A.prototype
或B.prototype
上添加/删除内容,这些更改将不会反射(reflect)在C.prototype
或在通过new C
创建的实例上。 instanceof
不会将通过new C
创建的对象视为instanceof A
或instanceof B
因为A.prototype
和B.prototype
不在其原型(prototype)链中。- 如果
A.prototype
和B.prototype
都具有相同的属性(例如,它们可能都覆盖了toString
),您可以只有一个。 (在上面的代码中,B.prototype
会获胜。)
关于javascript - 如何在javascript中继承2个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934152/