Классы JavaScript были представлены в ECMAScript 2015 и в первую очередь являются синтаксическим сахаром по сравнению с существующим в JavaScript наследованием на основе прототипов. Давайте посмотрим, как это наследование на основе прототипов выглядит за кулисами.
Давайте создадим объект «Рептилия», у которого есть два свойства: тип и возраст. Для этого объекта у нас будут функции установки для обоих свойств, и пока мы это делаем, скажем, тип будет каким-то пользовательским перечислением, как определено ниже.
Давайте посмотрим на реализацию класса нашего класса Reptile после ECMAScript 2015, просто для справки:
Это довольно просто, у нас есть класс Reptile, у которого есть пустая функция-конструктор для создания экземпляра.
Затем в определении класса мы можем установить два метода: setAge() и setType(), которые делают именно то, что звучат.
Теперь давайте посмотрим на реализацию прототипа — до ECMAScript 2015 (и на то, что в основном делает определение класса в фоновом режиме.
Здесь мы указываем, что такое «Рептилия». У него есть свойство Age и свойство Type, оба из которых по умолчанию имеют значение.
У каждого объекта в JavaScript есть закрытое свойство, которое содержит ссылку на другой объект, называемый его прототипом. Вот как мы можем настроить наши функции setAge() и setType().
Затем мы объявляем новую рептилию и сохраняем ее в переменной. Конструкторы объектов JavaScript — это просто функции, которые вызываются с помощью оператора new. Затем мы можем вызвать наши функции, которые мы настроили в прототипе, чтобы установить свойства Age и Type нашего экземпляра рептилии.
После того, как все сказано и сделано, мы можем использовать консоль, чтобы увидеть, что свойства нашей переменной рептилии были правильно установлены.
Это очень простой пример, но мне всегда интересно посмотреть, как что-то делалось до появления новых улучшений в разработке.
Если вам понравился этот небольшой обзор объектов JavaScript с использованием прототипирования, а не определения класса, дайте мне подписку и 👏, чтобы мотивировать меня писать подобные истории в будущем!