This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Object.seal()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
МетодObject.seal() запечатывает объект, предотвращая добавление новых свойств к объекту и делая все существующие свойства не настраиваемыми. Значения представленных свойств всё ещё могут изменяться, поскольку они остаются записываемыми.
In this article
Синтаксис
Object.seal(obj)
Параметры
objЗапечатываемый объект.
Описание
По умолчанию, объекты являютсярасширяемыми (к ним могут добавляться новые свойства). Запечатывание объекта предотвращает добавление к нему новых свойств и делает все существующие свойства не настраиваемыми. Оно делает все свойства объекта фиксированными и неизменными. Пометка всех свойств объекта как не настраиваемых также предотвращает их преобразование из свойств данных в свойства доступа и наоборот, но не предотвращает изменение значения свойств данных. Попытки удаления или добавления свойств к запечатанному объекту, либо преобразования свойств данных в свойства доступа и наоборот, будут терпеть неудачу, либо молча, либо с выбрасыванием исключенияTypeError (как правило, но не обязательно, это происходит встрогом режиме).
Цепочка прототипов не затрагивается. Однако, свойствоObject.prototype.__proto__Устарело также запечатываться.
Примеры
var obj = { prop: function () {}, foo: "bar",};// Новые свойства могу быть добавлены, существующие свойства могут быть изменены или удалены.obj.foo = "baz";obj.lumpy = "woof";delete obj.prop;var o = Object.seal(obj);assert(o === obj);assert(Object.isSealed(obj) === true);// Изменение значений свойств на запечатанном объекте всё ещё работает.obj.foo = "quux";// Но вы не можете преобразовать свойства данных в свойства доступа и наоборот.Object.defineProperty(obj, "foo", { get: function () { return "g"; },}); // выбросит TypeError// Теперь любые изменения, кроме изменения значений свойств, не будут работать.obj.quaxxor = "дружелюбная утка"; // молча не добавит свойствоdelete obj.foo; // молча не удалит свойство// ...а в строгом режиме такие попытки будут выбрасывать исключения TypeError.function fail() { "use strict"; delete obj.foo; // выбросит TypeError obj.sparky = "arf"; // выбросит TypeError}fail();// Попытка добавить что-то через Object.defineProperty также выбросит исключение.Object.defineProperty(obj, "ohai", { value: 17 }); // выбросит TypeErrorObject.defineProperty(obj, "foo", { value: "eit" }); // изменяем значение существующего свойстваПримечания
В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключениеTypeError. В ES6 такой аргумент будет рассматриваться, как простой запечатанный объект и метод его просто вернёт.
> Object.seal(1)TypeError: 1 is not an object // код ES5> Object.seal(1)1 // код ES6Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.seal> |