开发者问题收集

javascript es6 类原型链修改

2018-08-28
174

我试图将类 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);

代码的问题在于类 B 的构造函数中的 super() 调用不会调用类 C 的构造函数,因此属性 c 不会添加到对象中。我在这里做错了什么?

1个回答
构造函数中的

super 基于类的原型(而不是类的原型属性的原型):

 Object.setPrototypeOf(B.prototype, C.prototype);
 Object.setPrototypeOf(B, C);

这样您还可以获得正确的静态方法继承。

Jonas Wilms
2018-08-28