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
{{ message }}
Repository navigation
Commit 5777c31
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/08-symbol/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -161,7 +161,7 @@ for (let key in user) alert(key); // name, age (дані ключі не є си
161
161
alert( "Прямий доступ: "+ user[id] );
162
162
```
163
163
164
-
[Object.keys(user)](mdn:js/Object/keys) також ігнорує їх. Це частина загального принципу "приховування символьних властивостей". Якщо інший скрипт або бібліотека спробує перебрати наш об’єкт за допомогою цикла, він несподівано не отримає доступ до символьних властивостей.
164
+
[Object.keys(user)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) також ігнорує їх. Це частина загального принципу "приховування символьних властивостей". Якщо інший скрипт або бібліотека спробує перебрати наш об’єкт за допомогою цикла, він несподівано не отримає доступ до символьних властивостей.
165
165
166
166
А ось, [Object.assign](mdn:js/Object/assign) копіює властивості рядка та символу:
[JSON](http://uk.wikipedia.org/wiki/json) (JavaScript Object Notation) -- це загальний формат, який представляє значення та об’єкти. Він описується у [RFC 4627](http://tools.ietf.org/html/rfc4627) стандарті. Спочатку він був зроблений для JavaScript, але багато інших мов мають бібліотеки, щоб обробляють його також. Тому легко використовувати JSON для обміну даними, коли клієнт використовує JavaScript, а сервер написаний на Ruby/PHP/Java/що завгодно.
30
+
[JSON](https://uk.wikipedia.org/wiki/JSON) (JavaScript Object Notation) -- це загальний формат, який представляє значення та об’єкти. Він описується у [стандарті RFC 4627](https://datatracker.ietf.org/doc/html/rfc4627). Спочатку він був розроблений для JavaScript, але багато інших мов мають бібліотеки, щоб обробляють його також. Тому легко використовувати JSON для обміну даними, коли клієнт використовує JavaScript, а сервер написаний на Ruby/PHP/Java тощо.
31
31
32
32
JavaScript надає методи:
33
33
34
-
-`JSON.stringify` для перетворити об’єктів в JSON.
35
-
-`JSON.parse` для перетворення JSON назад в об’єкт.
34
+
-`JSON.stringify` для перетворення об’єктів в JSON (у вигляді тексту).
35
+
-`JSON.parse` для перетворення JSON-тексту назад в об’єкт.
36
36
37
37
Наприклад, тут ми викликаємо `JSON.stringify` з об’єктом `student`:
Тут ми, мабуть, занадто суворі. Список властивостей застосовується до всієї структури об’єкта. Отже, об’єкти в `participants`є порожніми, тому що `name` не в списку.
216
+
Тут ми, мабуть, занадто суворі. Список властивостей застосовується до всієї структури об’єкта. Отже, об’єкти в `participants`будуть порожніми, тому що `name` не в списку.
217
217
218
218
Включімо в список кожної власності, крім `room.occupiedBy`, що призведе до циклічного посилання:
Подібно до `tostring`для перетворення в рядки, об’єкт може надати метод `toJSON` для перетворення в JSON. `Json.stringify` автоматично викликає його, він доступний.
338
+
Подібно до методу `toString` (для перетворення об’єкта в рядок), об’єкт також має метод `toJSON` для його перетворення в JSON. Функція `Json.stringify` автоматично викликає цей метод.
Як ми бачимо, `toJSON` використовується як для прямого виклику `JSON.stringify(room)`, а також коли властивість `room` вкладена в іншому закодованому об’єкті.
399
+
Як бачимо, `toJSON` використовується як для прямого виклику `JSON.stringify(room)`, а також коли властивість `room` вкладена в іншому закодованому об’єкті.
В позначеному рядку `(*)`, об’єкт `animal` визначається як прототип для об’єкта `rabbit`.
57
+
В позначеному `(*)` рядку, об’єкт `animal` визначається як прототип для об’єкта `rabbit`.
58
58
59
59
І коли `alert` намагається прочитати властивість `rabbit.eats` (рядок позначено `(**)`), а її там немає, то JavaScript йде за посиланням `[[Prototype]]` та знаходить її в об’єкті `animal` (дивіться знизу вверх):
60
60
@@ -287,7 +287,7 @@ for(let prop in rabbit) alert(prop); // jumps, потім eats
287
287
*/!*
288
288
```
289
289
290
-
Якщо це не те, що нам потрібно, і ми б хотіли виключити отримання успадкованих значень, існує вбудований метод [obj.hasOwnProperty(key)](mdn:js/Object/hasOwnProperty), який повертає `true` якщо `obj` має тільки власні (не успадковані) властивості.
290
+
Якщо це не те, що нам потрібно, і ми б хотіли виключити отримання успадкованих значень, існує вбудований метод [obj.hasOwnProperty(key)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty), який повертає `true` якщо `obj` має тільки власні (не успадковані) властивості.
291
291
292
292
Отже, ми можемо відфільтрувати успадковані властивості (чи щось зробити з ними інше):
Іноді люди кажуть, що `class` -- це "синтаксичний цукор" (синтаксис, який призначений для того, щоб зробити речі легше для читання, але не вводить нічого нового), тому що ми могли б фактично оголосити те ж саме взагалі без ключового слова `class`:
121
+
Іноді люди кажуть, що `class` -- це "синтаксичний цукор" (синтаксис, який призначений для того, щоб зробити речі легше для читання, але не вводить нічого нового), тому що фактично ми могли б оголосити те саме без використання ключового слова `class`:
122
122
123
123
```js run
124
124
// переписування класу User в чистих функціях
@@ -144,17 +144,17 @@ user.sayHi();
144
144
145
145
Проте, існують важливі відмінності.
146
146
147
-
1. По-перше, функція, що створена за допомогою `class`, позначена спеціальною внутрішньою власністю`[[IsClassConstructor]]: true`. Так що це не зовсім те ж саме, що і створити її вручну.
147
+
1. По-перше, функція, що створена за допомогою `class`, позначена спеціальною внутрішньою властивістю`[[IsClassConstructor]]: true`. Так що це не зовсім те саме, що створити її вручну.
148
148
149
-
Мовна перевіряє цю властивість у різних місцях. Наприклад, на відміну від звичайної функції, її треба викликати з `new`:
149
+
Рушій перевіряє цю властивість у різних місцях. Наприклад, на відміну від звичайної функції, її треба викликати з `new`:
150
150
151
151
```js run
152
152
classUser {
153
153
constructor() {}
154
154
}
155
155
156
156
alert(typeof User); // function
157
-
User(); //Error: Class constructor User cannot be invoked without 'new'
157
+
User(); //Помилка: Конструктор класу User неможливо викликати без 'new'
158
158
```
159
159
160
160
Також, представлення конструктора класу у вигляді рядка у більшості рушіїв JavaScript починається з "class..."
@@ -166,21 +166,21 @@ user.sayHi();
166
166
167
167
alert(User); // class User { ... }
168
168
```
169
-
Є також інші відмінності, ми побачимо їх найближчим часом.
169
+
Є й інші відмінності, ми побачимо їх найближчим часом.
170
170
171
171
2. Методи класу неперелічувані.
172
-
Оголошення класу встановлює `enumerable` прапор у `false` для всіх методів в `"prototype"`.
172
+
Оголошення класу встановлює прапор `enumerable` у `false` для всіх методів в `"prototype"`.
173
173
174
-
Це добре тому, що коли ми проходимо через об’єкт за допомогою `for..in`, ми зазвичай не хочемо мати справу з методами класу.
174
+
Це добре тому, що коли ми перебираємо об’єкт за допомогою `for..in`, ми зазвичай не хочемо мати справу з методами класу.
175
175
176
176
3. Клас завжди `use strict`.
177
-
Весь код всередині конструкції класу автоматично знаходиться в строгому режимі.
177
+
Весь код всередині конструкції класу автоматично знаходиться в суворому режимі.
178
178
179
179
Крім того, синтаксис `class` приносить багато інших особливостей, які ми дослідимо пізніше.
180
180
181
181
## Class Expression
182
182
183
-
Так само, як функції, класи можуть бути визначені всередині іншого виразу, передані, повернуті, присвоєні та ін.
183
+
Так само, як функції, класи можуть бути визначені всередині іншого виразу, передані, повернуті, присвоєні тощо.
184
184
185
185
Ось приклад classexpression:
186
186
@@ -192,9 +192,9 @@ let User = class {
192
192
};
193
193
```
194
194
195
-
Подібно до Named Function Expression, classexpression може мати назву.
195
+
Подібно до Named Function Expression, Class Expression може мати назву.
196
196
197
-
Якщо classexpression має назву, то її видно лише у класі:
197
+
Якщо Class Expression має назву, то її видно лише у класі:
0 commit comments