Как предотвратить модификацию объекта в JavaScript?
Содержание
Существует множество способов блокировки объекта в соответствии с вашими потребностями.
- Object.freeze()
- Object.seal()
- Object.preventExtensions()
Object.freeze()
Чтобы предотвратить модификацию объектов JavaScript, одним из методов является использование Object.freeze(). Замораживание объекта не позволяет добавлять новые объекты к объекту и не позволяет удалить или изменить существующие свойства. Любая попытка сделать это потерпит неудачу, либо тихо, либо выбросив исключение TypeError (чаще всего, но не исключительно, в строгом режиме).
Синтаксис
Object.freeze(obj)
Пример
var student = { name: "John", age: 10 }; Object.freeze(student); student.grade = 2; // Выдает ошибку в строгом режиме document.write(student.grade); // не определено document.write("
"); delete student.age; // удалить свойство document.write(student.age); document.write("
"); student.name = "Doe"; document.write(student.name);
Выход
undefined 10 John
Замораживание объекта может быть полезно для представления логически неизменяемой структуры данных, особенно если изменение свойств объекта может привести к плохому поведению в другом месте вашего приложения. Object.freeze (...) неглубоко, это означает, что значения объекта в замороженном объекте по-прежнему изменяемы.
Object.seal()
Object.seal - это надмножество Object.preventExtensions в функциональности, поскольку в то же время он предотвращает привязку произвольных свойств к объектам, а также предотвращает изменение атрибутов свойств, которые уже существуют на объекте. Кроме того, он запрещает удаление свойств.
Синтаксис
Object.seal(obj)
Пример
var student = { name: "John", age: 10 }; Object.seal(student); student.grade = 2; // добавить новое свойство document.write(student.grade); // не определено document.write("
"); student.name = "Doe"; document.write(student.name); document.write("
"); // Doe delete student.age; document.write(student.age); // 10 document.write("
");
Выход
undefined Doe 10
Object.preventExtensions()
Object.preventExtensions() устанавливает расширяемый атрибут o в false, чтобы новые свойства не добавлялись к нему. Это постоянное изменение: после того, как объект был сделан не расширяемым, он не может быть снова расширяемым.
Пример
var student = { name: "John", age: 10 }; Object.preventExtensions(student); document.write(Object.isExtensible(student)); document.write("
"); student.grade = 2; // добавить новое свойство document.write(student.grade); // не определено document.write("
");
Выход
false undefined