изменение цепочки прототипов класса javascript es6 - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь добавить класс 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);

Проблема с кодом заключается в том, что super() вызов в конструкторе класса B не вызывает конструктор класса C, поэтому свойство c не добавляется к объекту. Что я здесь не так делаю?

1 Ответ

0 голосов
/ 28 августа 2018

super в конструкторе основан на прототипе классов (не на прототипе свойства прототипа классов):

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

Таким образом, вы также получаете правильное наследование статического метода.

...