В JavaScript объекты используются для хранения коллекций различных данных и более сложных сущностей с ключами. Объекты проникают почти во все аспекты языка JavaScript.

К объекту можно обращаться как к глобальному или передавать в качестве аргумента. Функции, имеющие доступ к объекту, могут изменять объект намеренно или случайно. Чтобы предотвратить изменение наших объектов, одним из методов является использование Object.freeze().Этот метод предотвращает изменение существующих атрибутов и значений свойств, а также предотвращает добавление новых свойств.

Хорошо, зачем мне замораживать объект?

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

Давайте посмотрим на пример:

переменный сотрудник = {

имя: «Джон Доу»,

роль: «Разработчик»

};

Object.freeze(сотрудник);

(функция() {

«использовать строго»;

// TypeError: Невозможно изменить роль свойства

employee.role = «Тестер»;

})();

Поскольку мы добавили строгий режим, мы увидим ошибку, как показано ниже.

Давайте посмотрим на другой пример:

переменный сотрудник = {

имя: «Джон Доу»,

роль: «Разработчик»

};

Object.freeze(сотрудник);

(функция() {

«использовать строго»;

// TypeError: Невозможно добавить отдел собственности, объект не расширяемый

наемный рабочий. отдел = «ИТ»;

})();

И вывод будет следующим:

Метод Object.freeze берет объект и делает его неизменяемым. В приведенном выше примере объект сотрудника остается защищенным от модификации и доступным для последующего использования.

Если вы не хотите выдавать ошибки повсюду, JavaScript предоставляет еще один метод Object.isFrozen() для определения того, заморожен ли объект.

переменный сотрудник = {

имя: «Джон Доу»,

роль: «Разработчик»

};

Object.freeze(сотрудник);

если (Object.isFrozen(сотрудник)) {

Сообщить("Сотрудник заморожен!");

}

И вы увидите результат следующим образом:

Object.freeze неглубокий, поэтому вам придется рекурсивно применять его к вложенным объектам, чтобы защитить их. Это часть спецификации ECMAScript 5, которая недоступна в старых браузерах, таких как IE8 и ниже.