From 1386fed7d38652d5848d315927e7e23a66cffd13 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Wed, 20 Oct 2021 13:28:52 +0300 Subject: [RU] Remove `name` attribute from headings (#2788) --- .../object/defineproperty/index.html | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html') diff --git a/files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html b/files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html index f4e2293986..05c18092f1 100644 --- a/files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html +++ b/files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html @@ -13,15 +13,15 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperty ---
{{JSRef("Global_Objects", "Object")}}
-

Сводка

+

Сводка

Метод Object.defineProperty() определяет новое или изменяет существующее свойство непосредственно на объекте, возвращая этот объект.

-

Синтаксис

+

Синтаксис

Object.defineProperty(obj, prop, descriptor)
-

Параметры

+

Параметры

obj
@@ -32,7 +32,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperty
Дескриптор определяемого или изменяемого свойства.
-

Описание

+

Описание

Этот метод позволяет точно добавлять или изменять свойства объекта. Обычное добавление свойств через присваивание создаёт свойства, которые можно увидеть через перечисление свойств (с помощью цикла {{jsxref("Statements/for...in", "for...in")}} или метода {{jsxref("Object.keys")}}), чьи значения могут быть изменены и которые могут быть {{jsxref("Operators/delete", "удалены", "", 1)}}. Этот же метод позволяет настроить эти дополнительные детали свойства.

@@ -112,11 +112,11 @@ Object.defineProperty(obj, 'key', withValue('static')); (Object.freeze || Object)(Object.prototype); -

Примеры

+

Примеры

Если вы хотите посмотреть, как использовать метод Object.defineProperty() с синтаксисом похожим-на-бинарные-флаги, смотрите дополнительные примеры.

-

Пример: создание свойства

+

Пример: создание свойства

Если указанное свойство не существует в объекте, метод Object.defineProperty() создаст новое свойство по переданному описанию. Поля в дескрипторе могут быть опущены, в этом случае их значения будут значениями по умолчанию. Все логические поля будут по умолчанию установлены в false. Поля value, get и set по умолчанию будут установлены в {{jsxref("Global_Objects/undefined", "undefined")}}. Свойство, определённое без атрибутов get/set/value/writable называется «общим», а дескриптор данных — «типовым».

@@ -156,7 +156,7 @@ Object.defineProperty(o, 'conflict', { // доступа -

Пример: изменение свойства

+

Пример: изменение свойства

Если свойство уже существует, метод Object.defineProperty() попытается изменить свойство в соответствии со значениями в дескрипторе и текущим состоянием объекта. Если у старого дескриптора атрибут configurable был установлен в false (говорит, что свойство является «ненастраиваемым»), то никакие атрибуты, кроме атрибута writable, не смогут быть изменены. В этом случае так же невозможно переключаться между типами дескрипторов.

@@ -164,7 +164,7 @@ Object.defineProperty(o, 'conflict', {

При попытке изменить ненастраиваемые атрибуты свойства будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} (кроме случая изменения атрибута writable), даже в том случае, если текущее и новое значения идентичны.

-

Атрибут writable

+

Атрибут writable

Если атрибут writable свойства установлен в false, свойство становится «незаписываемым». Ему невозможно будет присвоить новое значение.

@@ -183,7 +183,7 @@ console.log(o.a); // Выведет 37. Присваивание не срабо

Как видно в этом примере, попытка записи в незаписываемое свойство его не изменило, но и исключение так же не было выброшено.

-

Атрибут enumerable

+

Атрибут enumerable

Атрибут enumerable свойства определяет, просматривается ли свойство в цикле {{jsxref("Statements/for...in", "for...in")}} и методом {{jsxref("Object.keys()")}} или нет.

@@ -208,7 +208,7 @@ o.propertyIsEnumerable('b'); // false o.propertyIsEnumerable('c'); // false -

Атрибут configurable

+

Атрибут configurable

Атрибут configurable одновременно контролирует, может ли свойство быть удалено из объекта и могут ли быть изменены его атрибуты (кроме контроля изменения атрибута writable).

@@ -231,7 +231,7 @@ console.log(o.a); // Выведет 1

Если бы атрибут configurable объекта o.a был установлен в true, никакие ошибки не были бы выброшены и в конце свойство было бы удалено.

-

Пример: добавление свойств и значений по умолчанию

+

Пример: добавление свойств и значений по умолчанию

Важно понимать, как устанавливаются значения по умолчанию атрибутам свойств. Часто существует разница между простым назначением значения посредством точечной нотации и использованием метода Object.defineProperty(), что и показывает пример ниже.

@@ -258,7 +258,7 @@ Object.defineProperty(o, 'a', { }); -

Пример: пользовательские сеттеры и геттеры

+

Пример: пользовательские сеттеры и геттеры

Пример ниже показывает, как реализовать самоархивирующийся объект. При установке свойства temperature в массив archive попадает запись журнала.

@@ -287,7 +287,7 @@ arc.temperature = 13; arc.getArchive(); // [{ val: 11 }, { val: 13 }] -

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

+

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

@@ -309,12 +309,12 @@ arc.getArchive(); // [{ val: 11 }, { val: 13 }]
-

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

+

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

{{Compat}}

На основе таблицы совместимости Kangax.

-

Переопределение свойства length на объекте Array

+

Переопределение свойства length на объекте Array

На массивах возможно переопределить свойство {{jsxref("Array.length", "length")}}, при условии соблюдения обычных ограничений на переопределение. (Изначально свойство {{jsxref("Array.length", "length")}} является ненастраиваемым, неперечисляемым и записываемым. Таким образом, на неизмененном массиве возможно изменить значение свойства {{jsxref("Array.length", "length")}} либо сделать его незаписываемым. Его перечисляемость или настраиваемость изменить нельзя, так же как и его записываемость, если оно сделано не записываемым.) Однако не все браузеры поддерживают такое переопределение.

@@ -326,7 +326,7 @@ arc.getArchive(); // [{ val: 11 }, { val: 13 }]

Только Internet Explorer 9 и выше, а так же Firefox 23 и выше, по-видимому, полностью и правильно реализуют переопределение свойства {{jsxref("Array.length", "length")}} массивов. В настоящее время не стоит полагаться на работу переопределения свойства {{jsxref("Array.length", "length")}} массива, или что оно работает определённым образом. И даже если вы можете положиться на это, есть действительно веская причина не делать этого.

-

Примечания по Internet Explorer 8

+

Примечания по Internet Explorer 8

Реализация метода Object.defineProperty() в Internet Explorer 8 предусматривает, что он может быть использован только для объектов DOM. Нужно также отметить несколько моментов:

@@ -343,7 +343,7 @@ arc.getArchive(); // [{ val: 11 }, { val: 13 }] attempt to define a "prototype" property, on a function, with writable: false doesn't work as expected.

-

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

+

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