Что такое финальный класс?

Окончательный класс — это класс, который не может быть расширен. Проще говоря, вы не можете создавать подклассы из конечного класса. Предотвращение подкласса класса может быть особенно полезно, если вы пишете API или библиотеки и хотите избежать расширения для изменения базового поведения.

Большинство языков программирования имеют модификатор класса final, чтобы избежать расширения. Но TypeScript не имеет модификатора final, но с помощью декоратора мы можем добиться аналогичной функциональности.

Во-первых, у нас должно быть некоторое представление о неизменяемости объектов JavaScript и некоторых методах класса Object для реализации декоратора.

Неизменяемость в JavaScript

Неизменяемость означает, что после создания объекта мы не можем вносить в него какие-либо изменения. По существу объект становится доступным только для чтения.

Мы знаем, что свойство объекта JavaScript имеет такие атрибуты, как value, enumerable, configurable и доступно для записи. Из этих атрибутов свойств настраиваемыйи доступный для записи атрибуты наиболее важны при работе с неизменностью. По умолчанию для этих двух свойств задано значение true.

Настраиваемые и записываемые атрибуты свойств

Writable — когда для атрибута writable установлено значение true, свойство объекта value может быть изменено. В противном случае он только для чтения.

configurable — когда для параметра configurable установлено значение true, другие атрибуты можно изменить или удалить.

Это атрибуты уровня свойства. Также доступны методы уровня объекта, такие как Object.freeze() и Object.seal().

Объект.заморозить()

Когда мы замораживаем объект с помощью Object.freeze(), его больше нельзя изменить. По сути, новые свойства больше не могут быть добавлены к нему, а существующие свойства не могут быть удалены. Как вы можете догадаться, это достигается установкой всех флагов в false для всех свойств.

Объект.печать()

С Object.freeze() новые изменения не влияют на замороженный объект. Однако метод Object.seal() позволяет изменять существующие свойства. Это означает, что хотя вы не можете добавлять новые свойства или удалять существующие, вы можете вносить изменения. Метод Object.seal() в основном устанавливает для конфигурируемого флага, который мы обсуждали ранее, значение false, а для каждого свойства для параметра writable установлено значение true.

Давайте создадим несколько декораторов для использования с окончательными классами в Typescript, используя приведенные выше выводы.

финальный декоратор класса

Этот декоратор предотвратит создание экземпляров из унаследованных классов.

Вот как мы можем использовать наш декоратор @final.

Давайте попробуем расширить FinalClass и попробуем создать экземпляр из нового класса.

Error: Cannot inherit from final class исключение будет выдано во время выполнения, если вы попытаетесь это сделать.

декоратор замороженного класса

Это предотвратит изменение класса.

Резюме 🧳

Спасибо за прочтение этого поста. Если у вас есть какие-либо вопросы, пожалуйста, добавьте в качестве комментария. Если вам понравился этот пост, поддержите его!!! 👏

Вы можете найти код в моем репозитории Github.

Приятного обучения ❤️!

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу