Вебсправочник
Справочник JavaScript

Object.preventExtensions(): запрет добавления новых свойств

Object.preventExtensions запрещает добавлять собственные свойства к существующему объекту. Это более узкое ограничение, чем seal или freeze: часть операций с уже имеющимися свойствами остаётся доступной.

Назначение

Object.preventExtensions запрещает добавлять собственные свойства к существующему объекту. Это более узкое ограничение, чем seal или freeze: часть операций с уже имеющимися свойствами остаётся доступной.

Как это работает

Обычное изменяемое свойство можно записать заново, а конфигурируемое — удалить. После удаления вернуть ключ уже нельзя, поскольку это стало бы добавлением нового свойства. Операция не создаёт копию и не обходится по вложенным объектам.

Пример

"use strict";
const draft = {title: "Черновик", temp: true};
Object.preventExtensions(draft);
draft.title = "Готово";
delete draft.temp;
console.assert(draft.title === "Готово");
console.assert(!Object.isExtensible(draft));
console.assert(!Object.hasOwn(draft, "temp"));
let rejected = false;
try { draft.temp = false; } catch (error) { rejected = error instanceof TypeError; }
console.assert(rejected);
console.log(draft);

Что должно получиться

Заголовок обновляется, временное свойство удаляется, но добавить его обратно нельзя. Все действия происходят с исходной ссылкой draft, а не с особой защищённой копией.

Граница применения и частая ошибка

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

Самостоятельная проверка

Проверьте Object.isExtensible до операции и после неё. Добавьте вложенный объект и убедитесь, что он остаётся расширяемым. Сформулируйте, какую именно ошибку в своей модели данных вы хотите предотвращать.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.