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

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

+ +

{{EmbedInteractiveExample("pages/js/object-preventextensions.html")}}

+ +

Синтаксис

+ +
Object.preventExtensions(obj)
+ +

Параметры

+ +
+
obj
+
Объект, который нужно сделать нерасширяемым.
+
+ +

Возвращаемое значение

+ +

Объект, который делается нерасширяемым.

+ +

Описание

+ +

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

+ +

Метод Object.preventExtensions() предотвращает добавление только собственных свойств. Свойства всё ещё могут быть добавлены в прототип объекта. Однако, вызов Object.preventExtensions() на объекте также предотвращает расширение его свойства {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}}.

+ +

Если превратить расширяемый объект в нерасширяемый возможно, в ECMAScript 5 нет никакого способа сделать обратную операцию.

+ +

Примеры

+ +
// Object.preventExtensions возвращает объект, который нужно сделать нерасширяемым.
+var obj = {};
+var obj2 = Object.preventExtensions(obj);
+assert(obj === obj2);
+
+// Объекты по умолчанию являются расширяемыми.
+var empty = {};
+assert(Object.isExtensible(empty) === true);
+
+// ...но это может быть изменено.
+Object.preventExtensions(empty);
+assert(Object.isExtensible(empty) === false);
+
+// Object.defineProperty выбрасывает исключение при добавлении нового свойства в нерасширяемый объект.
+var nonExtensible = { removable: true };
+Object.preventExtensions(nonExtensible);
+Object.defineProperty(nonExtensible, 'new', { value: 8675309 }); // выбросит TypeError
+
+// В строгом режиме, попытки добавить новые свойства к нерасширяемому объекту, будут выбрасывать исключение TypeError.
+function fail() {
+  'use strict';
+  nonExtensible.newProperty = 'ОШИБКА'; // выбросит TypeError
+}
+fail();
+
+// РАСШИРЕНИЕ (работает только в движках, поддерживающих свойство __proto__
+// (которое является устаревшим. Используйте вместо него метод Object.getPrototypeOf)):
+// нерасширяемые объекты неизменны.
+var fixed = Object.preventExtensions({});
+fixed.__proto__ = { oh: 'hai' }; // выбросит TypeError
+
+ +

Примечания

+ +

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

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

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

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

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

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

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

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