Сделать свойство объекта неизменяемым можно несколькими способами:
Использование Object.defineProperty():
Этот метод позволяет определить или изменить свойства объекта с болееgranularным контролем. Для создания неизменяемого свойства нужно установить дескриптор свойства с writable: false.
javascript
Если установить configurable: false, свойство нельзя будет удалить или изменить его дескриптор (включая writable).
javascript
Использование Object.freeze():
Этот метод делает объект "замороженным". Это означает, что нельзя добавлять новые свойства, удалять существующие, изменять значения существующих свойств (включая их перечислимость и конфигурируемость), а также изменять прототип объекта.
javascript
Важно отметить, что Object.freeze() поверхностное. Если свойство объекта является другим объектом, этот внутренний объект не будет заморожен.
Использование const для переменных, содержащих объект:
Ключевое слово const делает ссылку на объект неизменяемой, но не сам объект. Вы не сможете переназначить переменную на другой объект, но сможете менять свойства самого объекта.
javascript
Сравнение методов:
| Метод | Что делает неизменяемым? | Уровень неизменяемости |
|---|---|---|
Object.defineProperty() | Одно конкретное свойство | Определяется дескриптором |
Object.freeze() | Весь объект | Поверхностный |
const | Ссылку на объект | Переменная |
Выбор метода зависит от того, насколько granularной должна быть неизменяемость. Для одного свойства подходит Object.defineProperty(), для всего объекта - Object.freeze(). Для предотвращения переназначения ссылки используется const.