You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/07-object-properties/01-property-descriptors/article.md
+15-15Lines changed: 15 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@
5
5
6
6
До этого момента, мы рассматривали свойство только как пару "ключ-значение". Но на самом деле, свойство объекта - это гораздо более гибкое и мощное понятие.
7
7
8
-
В этой главе мы изучим дополнительные средства их конфигурации, а в следующей увидим, как легко превратить их в специальные функции - геттеры и сеттеры.
8
+
В этой главе мы изучим дополнительные средства конфигурации свойств, а в следующей увидим, как легко превратить их в специальные функции - геттеры и сеттеры.
9
9
10
10
## Флаги свойств
11
11
@@ -15,7 +15,7 @@
15
15
-**`enumerable`** -- если `true`, свойство работает в циклах, в противном случае циклы его игнорируют.
16
16
-**`configurable`** -- если `true`, свойство можно удалить, а эти атрибуты можно изменять, иначе этого делать нельзя.
17
17
18
-
Мы еще не встречали эти атрибуты, потому что они имеют скрытую реализацию. Когда мы создаем свойство "обычным способом", все эти атрибуты имеют значение `true`. Но мы можем изменить их в любое время.
18
+
Мы еще не встречали эти атрибуты, потому что они имеют скрытую реализацию. Когда мы создаём свойство "обычным способом", все эти атрибуты имеют значение `true`. Но мы можем изменить их в любое время.
19
19
20
20
Сначала посмотрим, как получить эти флаги.
21
21
@@ -32,7 +32,7 @@ let descriptor = Object.getOwnPropertyDescriptor(obj, propertyName);
32
32
`propertyName`
33
33
: Имя свойства.
34
34
35
-
Возвращенный объект - это так называемый "дескриптор свойства": он содержит значение свойства и все его флаги.
35
+
Возвращаемый объект - это так называемый "дескриптор свойства": он содержит значение свойства и все его флаги.
: Объект и свойство, с которыми мы будем работать.
67
67
68
68
`descriptor`
69
-
: Дескриптор, который описывает поведение свойства.
69
+
: Применяемый дескриптор.
70
70
71
71
Если свойство существует, `defineProperty` обновит его флаги. В противном случае, метод создает новое свойство с указанным значением и флагами; в этом случае, если какой-либо флаг не указан явно, ему присваивается значение `false`.
Сравните этот способ с `user.name`, который мы создали выше "обычным способом": в этот раз все флаги имеют значение `false`. Если это не то, что нам нужно, надо присвоить им значения `true` в `дескрипторе`.
100
100
101
-
Давайте рассмотрим на примерах, что нам дает использование флагов.
101
+
Теперь давайте рассмотрим на примерах, что нам дает использование флагов.
102
102
103
103
## Только для чтения
104
104
105
-
Давайте сделаем свойство `user.name` доступным только для чтения. Для этого изменим флаг `writable`:
105
+
Сделаем свойство `user.name` доступным только для чтения. Для этого изменим флаг `writable`:
106
106
107
107
```js run
108
108
let user = {
@@ -120,9 +120,9 @@ user.name = "Pete"; // Ошибка: Невозможно изменить до
120
120
*/!*
121
121
```
122
122
123
-
Никто не сможет изменить имя пользователя, пока не переопределит наш метод `defineProperty` своим.
123
+
Теперь никто не сможет изменить имя пользователя, пока не переопределит наш метод `defineProperty` своим.
124
124
125
-
Вот та же самая операция, но в ситуации, когда свойство не существует:
125
+
Вот та же самая операция, но в ситуации, когда свойства не существует:
Определение свойства как неконфигурируемого - это дорога в один конец. Мы не сможем поменять это обратно, потому что `defineProperty` не работает с неконфигуриремыми свойствами.
```smart header="Ошибки отображаются только в режиме use strict"
243
-
В режиме non-strict, мы не увидим никаких ошибок при записи в свойства "только для чтения" и т.п. Но эти операции все равно не будут выполнены успешно. Действия, нарущающие ограничения флагов свойств, в режиме non-strict просто тихо игнорируются.
243
+
В режиме non-strict мы не увидим никаких ошибок при записи в свойства "только для чтения" и т.п. Эти операции все равно не будут выполнены успешно. Действия, нарушающие ограничения флагов свойств в режиме non-strict, просто тихо игнорируются.
244
244
```
245
245
246
-
## Object.defineProperties
246
+
## Метод Object.defineProperties
247
247
248
248
Существует метод [Object.defineProperties(obj, descriptors)](mdn:js/Object/defineProperties), который позволяет определять множество свойств сразу.
: Возвращает `false` если добавление свойств запрещено, иначе `true`.
311
+
: Возвращает `false`, если добавление свойств запрещено, иначе `true`.
312
312
313
313
[Object.isSealed(obj)](mdn:js/Object/isSealed)
314
-
: Возвращает `true` если добавление/удаление свойств запрещено и для всех существующих свойств установлено `configurable: false`.
314
+
: Возвращает `true`, если добавление/удаление свойств запрещено и для всех существующих свойств установлено `configurable: false`.
315
315
316
316
[Object.isFrozen(obj)](mdn:js/Object/isFrozen)
317
-
: Возвращает `true` если добавление/удаление/изменение свойств запрещено, и для всех текущих свойств установлено `configurable: false, writable: false`.
317
+
: Возвращает `true`, если добавление/удаление/изменение свойств запрещено, и для всех текущих свойств установлено `configurable: false, writable: false`.
0 commit comments