Вызовите конструктор класса для эмуляции полиморфизма в javascript - PullRequest
1 голос
/ 01 апреля 2020

Это, вероятно, дубликат, но я ничего не нашел.

В основном у меня есть этот (слишком упрощенный) код:

class A {
  doSomething() {
    return new A();
  }
}

class B extends A {
  doSomething() {
    return new B();
  }
}

const a = new A().doSomething() // a should be an instance of A
const b = new B().doSomething() // b should be an instance of B

Здесь doSomething делает точно То же самое в обоих классах, за исключением типа возвращаемого экземпляра (я пытаюсь иметь неизменяемые экземпляры).

Итак, я сделал так, чтобы изменить код следующим образом:

class A {
  doSomething() {
    return this.constructor();
  }
}

class B extends A {
  // nothing
}

... что, кажется, работает нормально. Но у меня такое ощущение, что это скорее взлом, чем что-либо другое.

Есть ли лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...