JavaScript метод preventExtensions()

JavaScript Object

Определение и применение

JavaScript метод preventExtensions() позволяет сделать объект нерасширяемым (предотвращает добавление новых собственных (неунаследованных) свойств). При этом допускается как удаление, так и изменение свойств объекта, на котором был вызван метод.


Обратите внимание на то, что действие этого метода необратимо, так как нерасширяемый объект нельзя вновь сделать расширяемым объектом. Чтобы проверить является ли объект расширяемым вы можете воспользоваться методом isExtensible().


Если в цепочке прототипов объекта на котором был вызван метод preventExtensions() содержится расширяемый объект, то в этом случае остается возможность добавить в нерасширяемый объект унаследованные свойства.

Сравнение подобных методов

МетодОбъект становится нерасширяемымАтрибут configurable для каждого собственного (неунаследованного) свойства имеет значение false Атрибут writable для каждого собственного (неунаследованного) свойства имеет значение false
preventExtensions()ДаНетНет
seal()ДаДаНет
freeze()ДаДаДа

Поддержка браузерами

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
Edge
preventExtensions()6.04.012.05.19.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