ООП в JavaScriptНаследованиеhard

Прототипное наследование

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