Объекты — очень мощный и недооцененный строительный блок javascript. Как мы знаем, все в javascript является объектом, поэтому ясно одно: мы можем использовать мощь объекта javascript в нашем программном обеспечении и в конечном итоге улучшить качество кода.
Здесь мы углубимся в дескрипторы свойств.

  1. Доступно для записи

Возможность для вас изменить значение свойства контролируется writable.

2. Настраиваемый

Пока свойство в настоящее время настраивается, мы можем изменить определение его дескриптора, используя ту же утилиту defineProperty(..)

3. Неизменяемый и (4.) Постоянный

Комбинируя writable:false и configurable:false, вы можете создать константу (невозможно изменить, переопределить или удалить) как свойство объекта.

5. Предотвратить продление

6. Запечатать и (7.) Заморозить

Object.seal(..) создает "запечатанный" объект, что означает, что он берет существующий объект и по существу вызывает для него Object.preventExtensions(..), но также помечает все его существующие свойства как configurable:false.

Object.freeze(..) создает замороженный объект, что означает, что он берет существующий объект и, по сути, вызывает для него Object.seal(..), но также помечает все свойства «аксессора данных» как writable:false, поэтому их значения нельзя изменить.

Этот подход является высшим уровнем неизменности, которого вы можете достичь для самого объекта, поскольку он предотвращает любые изменения объекта или любых его непосредственных свойств. Вы можете «заморозить» объект, рекурсивно перебирая все объекты, на которые он ссылается.