Автор оригинала: Gaurav Singh.
Гаурав Сингх
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 (). Вы можете проверить, является ли объект запечатан или не использует объект .esealed ();
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: заморозить:
То же самое, что и уплотнение, в дополнение к этому предотвращению существующих свойств методы от модифицированы (все свойства и методы только для чтения).
Чтобы заморозить объект, используйте объект. SFREEZE () метод. Мы также можем определить, заморожен объект, используя объект .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