|
| 1 | + |
1 | 2 | # Копирование объектов и ссылки |
2 | 3 |
|
3 | 4 | Одно из фундаментальных отличий объектов от примитивов заключается в том, что объекты хранятся и копируются "по ссылке", тогда как примитивные значения: строки, числа, логические значения и т.д. – всегда копируются "как целое значение". |
@@ -154,7 +155,7 @@ let permissions1 = { canView: true }; |
154 | 155 | let permissions2 = { canEdit: true }; |
155 | 156 |
|
156 | 157 | *!* |
157 | | -// копирует все свойства из permissions1 и permissions2 в user |
| 158 | +// копируем все свойства из permissions1 и permissions2 в user |
158 | 159 | Object.assign(user, permissions1, permissions2); |
159 | 160 | */!* |
160 | 161 |
|
@@ -220,7 +221,7 @@ let clone = Object.assign({}, user); |
220 | 221 |
|
221 | 222 | alert( user.sizes === clone.sizes ); // true, тот же объект |
222 | 223 |
|
223 | | -// user и clone обладают общими размерами |
| 224 | +// user и clone обладают общим свойством sizes |
224 | 225 | user.sizes.width++; // изменяем свойства в первом объекте |
225 | 226 | alert(clone.sizes.width); // 51, видим результат в другом |
226 | 227 | ``` |
@@ -257,6 +258,6 @@ alert(user.name); // Pete |
257 | 258 |
|
258 | 259 | Объекты присваиваются и копируются по ссылке. Другими словами, переменная хранит не "значение объекта", а "ссылку" (адрес в памяти) на это значение. Таким образом, копирование такой переменной или передача её в качестве аргумента функции копирует эту ссылку, а не сам объект. |
259 | 260 |
|
260 | | -Все операции с помощью скопированных ссылок (например, добавление/удаление свойств) выполняются с одним и тем же объектом. |
| 261 | +Все операции с использованием скопированных ссылок (например, добавление/удаление свойств) выполняются с одним и тем же объектом. |
261 | 262 |
|
262 | 263 | Чтобы создать "реальную копию" (клон), мы можем использовать `Object.assign` для так называемой "поверхностной копии" (вложенные объекты копируются по ссылке) или функцию "глубокого клонирования", такую как [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep). |
0 commit comments