javascript es6类原型链修改

时间:2018-08-28 15:45:49

标签: javascript inheritance ecmascript-6 prototype

我正在尝试将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 个答案:

答案 0 :(得分:5)

构造函数中的

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

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

这样,您还可以获得适当的静态方法继承。