Пусть нам дан класс Animal с конструктором, принимающим имя животного и его возраст. Дополнительно у класса реализован метод play.
class Animal { constructor(name, ageInYears) { this.name = name.toUpperCase(); this.ageInMonths = ageInYears * 12; } play() { return `${this.name} is playing`; } }
Класс Cat наследует класс Animal, добавляя метод meow.
class Cat extends Animal { meow() { return `${this.name} says meow`; } }
Конструктор наследуется автоматически. Имя Барсика записывается в верхнем регистре как "BARSIK", потому что в классе Cat переиспользуется конструктор Animal. Если изменится поведение конструктора класса Animal, то конструктор Cat начнет работать по-другому.
const barsique = new Cat("Barsik", 2); console.log(barsique.name); // "BARSIK" console.log(barsique.ageInMonths); // 24
Перепишите класс Cat через функцию-конструктор и прототипы, как это делали до ES2015. Класс Animal в решение добавлять не нужно. Считается, что он уже объявлен и выглядит вот так:
function Animal(name, ageInYears) { this.name = name.toUpperCase(); this.ageInMonths = ageInYears * 12; } Animal.prototype.play = function() { return `${this.name} is playing`; };