Пусть нам дан класс 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`; };