JavaScript метод preventExtensions()
JavaScript ObjectОпределение и применение
JavaScript метод preventExtensions() позволяет сделать объект нерасширяемым (предотвращает добавление новых собственных (неунаследованных) свойств). При этом допускается как удаление, так и изменение свойств объекта, на котором был вызван метод.
Обратите внимание на то, что действие этого метода необратимо, так как нерасширяемый объект нельзя вновь сделать расширяемым объектом. Чтобы проверить является ли объект расширяемым вы можете воспользоваться методом isExtensible().
Если в цепочке прототипов объекта на котором был вызван метод preventExtensions() содержится расширяемый объект, то в этом случае остается возможность добавить в нерасширяемый объект унаследованные свойства.
Сравнение подобных методов
Метод | Объект становится нерасширяемым | Атрибут configurable для каждого собственного (неунаследованного) свойства имеет значение false | Атрибут writable для каждого собственного (неунаследованного) свойства имеет значение false |
---|---|---|---|
preventExtensions() | Да | Нет | Нет |
seal() | Да | Да | Нет |
freeze() | Да | Да | Да |
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
preventExtensions() | 6.0 | 4.0 | 12.0 | 5.1 | 9.0 | Да |
JavaScript синтаксис:
Object.preventExtensions( obj );
Версия JavaScript
ECMAScript 5.1 (реализовано в JavaScript 1.8.5)Значения параметров
Параметр | Описание |
---|---|
obj | Целевой объект, который необходимо сделать нерасширяемым. Обязательное значение. |
Исключения
Тип исключения | Описание |
---|---|
TypeError | Возникает в том случае, если значение параметра, определяющее целевой объект не является объектом. Начиная с версии ECMAScript 6 параметр, который не является объектом будет сначала приведён к объекту. |
Пример использования
// инициализируем переменную, содержащую объект let obj = { a: 1, b: 2, c: 3 }; // проверяем является ли объект расширяемым Object.isExtensible( obj ); // true obj.d = 4; // добавляем свойство // делаем объект нерасширяемым Object.preventExtensions( obj ); obj.a = 100; // изменяем свойство delete obj.c; // удаляем свойство console.log( obj ); // {a: 100, b: 2, d: 4} // пытаемся добавить свойство obj.f = 5; console.log( obj ); // {a: 100, b: 2, d: 4} // проверяем является ли объект расширяемым Object.isExtensible( obj ); // false
В этом примере мы инициализировали переменную, содержащую объект и с помощью метода isExtensible() мы проверяем является ли объект расширяемым. Получив подтверждение о том, что объект является расширяемым мы добавляем в него свойство d, и с помощью метода preventExtensions() делаем его нерасширяемым.
Далее мы изменяем свойство a объекта и удаляем свойство с, выводим содержимое объекта в консоль, и пытаемся добавить свойство f в объект. Затем снова выводим в консоль содержимое объекта, как вы можете заметить свойство f добавлено не было.
В заключении примера с помощью метода isExtensible() мы проверяем является ли наш объект расширяемым, в результате чего мы получаем значение falsе, которое свидетельствует о том, что наш объект является нерасширяемым.
JavaScript Object