Skip to content

Commit 8f2d63c

Browse files
author
Sergey
authored
Update article.md
1 parent 3d8eed0 commit 8f2d63c

1 file changed

Lines changed: 15 additions & 15 deletions

File tree

  • 1-js/07-object-properties/01-property-descriptors

1-js/07-object-properties/01-property-descriptors/article.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
До этого момента, мы рассматривали свойство только как пару "ключ-значение". Но на самом деле, свойство объекта - это гораздо более гибкое и мощное понятие.
77

8-
В этой главе мы изучим дополнительные средства их конфигурации, а в следующей увидим, как легко превратить их в специальные функции - геттеры и сеттеры.
8+
В этой главе мы изучим дополнительные средства конфигурации свойств, а в следующей увидим, как легко превратить их в специальные функции - геттеры и сеттеры.
99

1010
## Флаги свойств
1111

@@ -15,7 +15,7 @@
1515
- **`enumerable`** -- если `true`, свойство работает в циклах, в противном случае циклы его игнорируют.
1616
- **`configurable`** -- если `true`, свойство можно удалить, а эти атрибуты можно изменять, иначе этого делать нельзя.
1717

18-
Мы еще не встречали эти атрибуты, потому что они имеют скрытую реализацию. Когда мы создаем свойство "обычным способом", все эти атрибуты имеют значение `true`. Но мы можем изменить их в любое время.
18+
Мы еще не встречали эти атрибуты, потому что они имеют скрытую реализацию. Когда мы создаём свойство "обычным способом", все эти атрибуты имеют значение `true`. Но мы можем изменить их в любое время.
1919

2020
Сначала посмотрим, как получить эти флаги.
2121

@@ -32,7 +32,7 @@ let descriptor = Object.getOwnPropertyDescriptor(obj, propertyName);
3232
`propertyName`
3333
: Имя свойства.
3434

35-
Возвращенный объект - это так называемый "дескриптор свойства": он содержит значение свойства и все его флаги.
35+
Возвращаемый объект - это так называемый "дескриптор свойства": он содержит значение свойства и все его флаги.
3636

3737
Например:
3838

@@ -66,7 +66,7 @@ Object.defineProperty(obj, propertyName, descriptor)
6666
: Объект и свойство, с которыми мы будем работать.
6767

6868
`descriptor`
69-
: Дескриптор, который описывает поведение свойства.
69+
: Применяемый дескриптор.
7070

7171
Если свойство существует, `defineProperty` обновит его флаги. В противном случае, метод создает новое свойство с указанным значением и флагами; в этом случае, если какой-либо флаг не указан явно, ему присваивается значение `false`.
7272

@@ -98,11 +98,11 @@ alert( JSON.stringify(descriptor, null, 2 ) );
9898

9999
Сравните этот способ с `user.name`, который мы создали выше "обычным способом": в этот раз все флаги имеют значение `false`. Если это не то, что нам нужно, надо присвоить им значения `true` в `дескрипторе`.
100100

101-
Давайте рассмотрим на примерах, что нам дает использование флагов.
101+
Теперь давайте рассмотрим на примерах, что нам дает использование флагов.
102102

103103
## Только для чтения
104104

105-
Давайте сделаем свойство `user.name` доступным только для чтения. Для этого изменим флаг `writable`:
105+
Сделаем свойство `user.name` доступным только для чтения. Для этого изменим флаг `writable`:
106106

107107
```js run
108108
let user = {
@@ -120,9 +120,9 @@ user.name = "Pete"; // Ошибка: Невозможно изменить до
120120
*/!*
121121
```
122122

123-
Никто не сможет изменить имя пользователя, пока не переопределит наш метод `defineProperty` своим.
123+
Теперь никто не сможет изменить имя пользователя, пока не переопределит наш метод `defineProperty` своим.
124124

125-
Вот та же самая операция, но в ситуации, когда свойство не существует:
125+
Вот та же самая операция, но в ситуации, когда свойства не существует:
126126

127127
```js run
128128
let user = { };
@@ -213,7 +213,7 @@ alert( JSON.stringify(descriptor, null, 2 ) );
213213
```js run
214214
Math.PI = 3; // Ошибка
215215

216-
// удаление Math.PI также не будет работать
216+
// delete Math.PI тоже не сработает
217217
```
218218

219219
Определение свойства как неконфигурируемого - это дорога в один конец. Мы не сможем поменять это обратно, потому что `defineProperty` не работает с неконфигуриремыми свойствами.
@@ -240,10 +240,10 @@ Object.defineProperty(user, "name", {writable: true}); // Ошибка
240240
```
241241

242242
```smart header="Ошибки отображаются только в режиме use strict"
243-
В режиме non-strict, мы не увидим никаких ошибок при записи в свойства "только для чтения" и т.п. Но эти операции все равно не будут выполнены успешно. Действия, нарущающие ограничения флагов свойств, в режиме non-strict просто тихо игнорируются.
243+
В режиме non-strict мы не увидим никаких ошибок при записи в свойства "только для чтения" и т.п. Эти операции все равно не будут выполнены успешно. Действия, нарушающие ограничения флагов свойств в режиме non-strict, просто тихо игнорируются.
244244
```
245245

246-
## Object.defineProperties
246+
## Метод Object.defineProperties
247247

248248
Существует метод [Object.defineProperties(obj, descriptors)](mdn:js/Object/defineProperties), который позволяет определять множество свойств сразу.
249249

@@ -279,7 +279,7 @@ Object.defineProperties(user, {
279279
let clone = Object.defineProperties({}, Object.getOwnPropertyDescriptors(obj));
280280
```
281281

282-
При клонировании объекта мы обычно используем присваивание, чтобы скопировать его свойства. Примерно так:
282+
При клонировании объекта мы обычно используем присваивание, чтобы скопировать его свойства. Вот так:
283283

284284
```js
285285
for (let key in user) {
@@ -308,12 +308,12 @@ for (let key in user) {
308308
А также есть методы для их проверки:
309309

310310
[Object.isExtensible(obj)](mdn:js/Object/isExtensible)
311-
: Возвращает `false` если добавление свойств запрещено, иначе `true`.
311+
: Возвращает `false`, если добавление свойств запрещено, иначе `true`.
312312

313313
[Object.isSealed(obj)](mdn:js/Object/isSealed)
314-
: Возвращает `true` если добавление/удаление свойств запрещено и для всех существующих свойств установлено `configurable: false`.
314+
: Возвращает `true`, если добавление/удаление свойств запрещено и для всех существующих свойств установлено `configurable: false`.
315315

316316
[Object.isFrozen(obj)](mdn:js/Object/isFrozen)
317-
: Возвращает `true` если добавление/удаление/изменение свойств запрещено, и для всех текущих свойств установлено `configurable: false, writable: false`.
317+
: Возвращает `true`, если добавление/удаление/изменение свойств запрещено, и для всех текущих свойств установлено `configurable: false, writable: false`.
318318

319319
На практике эти методы используются редко.

0 commit comments

Comments
 (0)