From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../global_objects/object/seal/index.html | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/object/seal/index.html (limited to 'files/ru/web/javascript/reference/global_objects/object/seal') diff --git a/files/ru/web/javascript/reference/global_objects/object/seal/index.html b/files/ru/web/javascript/reference/global_objects/object/seal/index.html new file mode 100644 index 0000000000..6514429ca6 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/object/seal/index.html @@ -0,0 +1,119 @@ +--- +title: Object.seal() +slug: Web/JavaScript/Reference/Global_Objects/Object/seal +tags: + - ECMAScript5 + - JavaScript + - JavaScript 1.8.5 + - Method + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/seal +--- +
{{JSRef("Global_Objects", "Object")}}
+ +

Метод Object.seal() запечатывает объект, предотвращая добавление новых свойств к объекту и делая все существующие свойства не настраиваемыми. Значения представленных свойств всё ещё могут изменяться, поскольку они остаются записываемыми.

+ +

Синтаксис

+ +
Object.seal(obj)
+ +

Параметры

+ +
+
obj
+
Запечатываемый объект.
+
+ +

Описание

+ +

По умолчанию, объекты являются {{jsxref("Object.isExtensible()", "расширяемыми", "", 1)}} (к ним могут добавляться новые свойства). Запечатывание объекта предотвращает добавление к нему новых свойств и делает все существующие свойства не настраиваемыми. Оно делает все свойства объекта фиксированными и неизменными. Пометка всех свойств объекта как не настраиваемых также предотвращает их преобразование из свойств данных в свойства доступа и наоборот, но не предотвращает изменение значения свойств данных. Попытки удаления или добавления свойств к запечатанному объекту, либо преобразования свойств данных в свойства доступа и наоборот, будут терпеть неудачу, либо молча, либо с выбрасыванием исключения {{jsxref("Global_Objects/TypeError", "TypeError")}} (как правило, но не обязательно, это происходит в {{jsxref("Strict_mode", "строгом режиме", "", 1)}}).

+ +

Цепочка прототипов не затрагивается. Однако, свойство {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}} также запечатыватся.

+ +

Примеры

+ +
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 }); // выбросит TypeError
+Object.defineProperty(obj, 'foo', { value: 'eit' }); // изменяем значение существующего свойства
+
+ +

Примечания

+ +

В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет рассматриваться, как простой запечатанный объект и метод его просто вернёт.

+ +
> Object.seal(1)
+TypeError: 1 is not an object // код ES5
+
+> Object.seal(1)
+1                             // код ES6
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарии
{{SpecName('ES5.1', '#sec-15.2.3.8', 'Object.seal')}}{{Spec2('ES5.1')}}Изначальное определение. Реализована в JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.seal', 'Object.seal')}}{{Spec2('ES6')}}
+ +

Совместимость с браузерами

+ +
{{Compat("javascript.builtins.Object.seal")}}
+ +

Смотрите также

+ + -- cgit v1.2.3-54-g00ecf