1 javascript inheritance prototype ecmascript-6
我试图将类C添加到B类的原型链中
class A {
constructor() {
this.a = 'a';
}
}
class B extends A {
constructor() {
super();
this.b = 'b';
}
}
class C extends A {
constructor() {
super();
this.c = 'c';
}
}
Object.setPrototypeOf(B.prototype, C.prototype);
var a = new A();
var b = new B();
console.log(b instanceof C);
console.log(b instanceof A);
console.log(b.c);
Run Code Online (Sandbox Code Playgroud)
代码的问题是super()
在类B的构造函数中调用不会调用类C的构造函数,因此属性c不会被添加到对象中.我在这做错了什么?
super
在构造函数中是基于类原型(而不是类原型属性的原型):
Object.setPrototypeOf(B.prototype, C.prototype);
Object.setPrototypeOf(B, C);
Run Code Online (Sandbox Code Playgroud)
这样你也可以获得适当的静态方法继承.