Как предотвратить модификацию объекта в JavaScript?

Существует множество способов блокировки объекта в соответствии с вашими потребностями.

  1. Object.freeze()
  2. Object.seal()
  3. 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

Источник: http://net-informations.com/js/iq/prev.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector