В 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 и ниже.