Как расширить класс в JavaScript, когда у него нет конструктора по умолчанию? - PullRequest
0 голосов
/ 19 апреля 2019

Как в JavaScript расширить базовый класс, если нет конструктора, подходящего для использования при назначении прототипа нового класса?Решение ...

  1. Должен пройти instanceof тест.
  2. Не должен изменять существующий конструктор.
  3. Должен вызвать супер-конструктор.
  4. Долженне включает промежуточный класс, который я пишу.
  5. Не должен зависеть от стороннего кода, такого как jQuery.
  6. Может включать вспомогательную функцию, которую вы предоставляете.

Здесьэто то, что я пробовал.

function Person(name) { // Immutable base class.
  if (typeof name != "string" || name == "") {
    throw new Error("A person must have a valid name.");
  }
  this.getName = function() {
    return name;
  }
}

function Artist(name) { // My extending class.
  Person.call(this, name); // Call super constructor.
}
Artist.prototype = new Person(); // Express inheritance without parameters.
var tom = new Artist("Tom");
console.info(tom instanceof Person); // Must print true.
console.info(tom.getName()); // Must print Tom.

Мое решение не удалось, потому что выброшено исключение

1 Ответ

4 голосов
/ 19 апреля 2019

Вы неправильно наследуете, должно быть:

Artist.prototype = Object.create(Person.prototype);

Это работает, и все ваши тесты пройдены.

Полезное чтение: Наследование в JavaScript

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