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

Перейти к профилю Гаурава Сингха

Гаурав Сингх

ECMAScript 5 представляет несколько методов для предотвращения модификации объекта, которые блокируют объект, чтобы гарантировать, что никто случайно или иным образом не изменит функциональность объекта.

Существует три уровня предотвращения модификации:

1: Предотвратить расширения:

К объекту нельзя добавить новые свойства или методы, но можно изменить существующие свойства и метод.

Например:

var employee = {
  name: "Nishant"
};

// lock the object 
Object.preventExtensions(employee);

// Now try to change the employee object property name
employee.name = "John"; // work fine

//Now try to add some new property to the object
employee.age = 24; // fails silently unless it's inside the strict mode

2: Печать:

Это то же самое, что и предотвращение расширения, в дополнение к этому также предотвращается удаление существующих свойств и методов.

Чтобы запечатать объект, мы используем метод Object.seal(). вы можете проверить, запечатан объект или нет, используя Object.isSealed();

var employee = {
  name: "Nishant"
};

// Seal the object 
Object.seal(employee);

console.log(Object.isExtensible(employee)); // false
console.log(Object.isSealed(employee)); // true

delete employee.name // fails silently unless it's in strict mode

// Trying to add new property will give an error
employee.age = 30; // fails silently unless in strict mode

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

3: Заморозить:

То же, что и печать. В дополнение к этому предотвращается изменение существующих методов свойств (все свойства и методы доступны только для чтения).

Чтобы заморозить объект, используйте метод Object.freeze(). Мы также можем определить, заморожен ли объект, используя Object.isFrozen();

var employee = {
  name: "Nishant"
};

//Freeze the object
Object.freeze(employee);

// Seal the object 
Object.seal(employee);

console.log(Object.isExtensible(employee)); // false
console.log(Object.isSealed(employee)); // true
console.log(Object.isFrozen(employee)); // true

employee.name = "xyz"; // fails silently unless in strict mode
employee.age = 30; // fails silently unless in strict mode
delete employee.name // fails silently unless it's in strict mode

Замороженные объекты считаются как нерасширяемыми, так и запечатанными.

Рекомендуемые:

Если вы решили предотвратить модификацию, запечатать, заморозить объект, то используйте в строгом режиме, чтобы вы могли отловить ошибку.

Например:

"use strict";

var employee = {
  name: "Nishant"
};

//Freeze the object
Object.freeze(employee);

// Seal the object 
Object.seal(employee);

console.log(Object.isExtensible(employee)); // false
console.log(Object.isSealed(employee)); // true
console.log(Object.isFrozen(employee)); // true

employee.name = "xyz"; // fails silently unless in strict mode
employee.age = 30; // fails silently unless in strict mode
delete employee.name; // fails silently unless it's in strict mode

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *