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/04-object-basics/02-object-copy/article.md
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
Это легко понять, если мы немного заглянем под капот того, что происходит, когда мы копируем значение.
6
6
7
-
Давайте начнем с примитива, такого как строка.
7
+
Давайте начнём с примитива, такого как строка.
8
8
9
9
Здесь мы помещаем копию `message` во `phrase`:
10
10
@@ -39,7 +39,7 @@ let user = {
39
39
40
40
Мы можем думать об переменной объекта, такой как `user`, как о листе бумаги с адресом объекта на нем.
41
41
42
-
Когда мы выполняем действия с объектом, к примеру, берем свойство `user.name `, движок JavaScript просматривает то, что находится по этому адресу, и выполняет операцию с самим объектом.
42
+
Когда мы выполняем действия с объектом, к примеру, берём свойство `user.name `, движок JavaScript просматривает то, что находится по этому адресу, и выполняет операцию с самим объектом.
Как вы можете видеть, все еще есть один объект, но теперь с двумя переменными, которые ссылаются на него.
60
+
Как вы можете видеть, все ещё есть один объект, но теперь с двумя переменными, которые ссылаются на него.
61
61
62
62
Мы можем использовать любую переменную для доступа к объекту и изменения его содержимого:
63
63
@@ -73,7 +73,7 @@ admin.name = 'Pete'; // изменено по ссылке из перемен
73
73
alert(*!*user.name*/!*); //'Pete', изменения видны по ссылке из переменной "user"
74
74
```
75
75
76
-
Это как если бы у нас был шкафчик с двумя ключами, и мы использовали один из них (`admin`), чтобы войти в него и внести изменения. А затем, если мы позже используем другой ключ (`user`), мы все равно открываем тот же шкафчик и можем получить доступ к измененному содержимому.
76
+
Это как если бы у нас был шкафчик с двумя ключами, и мы использовали один из них (`admin`), чтобы войти в него и внести изменения. А затем, если мы позже используем другой ключ (`user`), мы все равно открываем тот же шкафчик и можем получить доступ к изменённому содержимому.
77
77
78
78
## Сравнение по ссылке
79
79
@@ -102,7 +102,7 @@ alert( a == b ); // false
102
102
103
103
## Клонирование и объединение, Object.assign
104
104
105
-
Итак, копирование объектной переменной создает еще одну ссылку на тот же объект.
105
+
Итак, копирование объектной переменной создаёт ещё одну ссылку на тот же объект.
106
106
107
107
Но что, если нам всё же нужно дублировать объект? Создать независимую копию, клон?
108
108
@@ -130,7 +130,7 @@ for (let key in user) {
130
130
// теперь clone это полностью независимый объект с тем же содержимым
131
131
clone.name="Pete"; // изменим в нём данные
132
132
133
-
alert( user.name ); // все еще John в первоначальном объекте
133
+
alert( user.name ); // все ещё John в первоначальном объекте
134
134
```
135
135
136
136
Также мы можем использовать для этого метод [Object.assign](mdn:js/Object/assign).
@@ -230,7 +230,7 @@ alert(clone.sizes.width); // 51, видим результат в другом
230
230
Мы можем реализовать глубокое клонирование, используя рекурсию. Или, чтобы не изобретать заново велосипед, возьмите готовую реализацию, например [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep) из библиотеки JavaScript [lodash](https://lodash.com).
231
231
232
232
````smart header="Объекты объявленные как константа могут быть изменены"
233
-
Важным побочным эффектом хранения объектов в качестве ссылок является то, что объект, объявленный как const, может быть изменен.
233
+
Важным побочным эффектом хранения объектов в качестве ссылок является то, что объект, объявленный как const, может быть изменён.
234
234
235
235
Например:
236
236
@@ -255,8 +255,8 @@ alert(user.name); // Pete
255
255
256
256
## Итого
257
257
258
-
Объекты присваиваются и копируются по ссылке. Другими словами, переменная хранит не "значение объекта", а "ссылку" (адрес в памяти) на это значение. Поэтому копирование такой переменной или передача её в качестве аргумента функции приводит к копированию этой ссылки, а не самого объекта.
258
+
Объекты присваиваются и копируются по ссылке. Другими словами, переменная хранит не "значение объекта", а "ссылку" (адрес в памяти) на это значение. Таким образом, копирование такой переменной или передача её в качестве аргумента функции копирует эту ссылку, а не сам объект.
259
259
260
-
Все операции с использованием скопированных ссылок (например, добавление или удаление свойств) выполняются с одним и тем же объектом.
260
+
Все операции с помощью скопированных ссылок (например, добавление/удаление свойств) выполняются с одним и тем же объектом.
261
261
262
-
Для "простого клонирования" объекта можно использовать `Object.assign`. Необходимо помнить, что `Object.assign` не делает глубокое клонирование объекта. Если внутри копируемого объекта есть свойство, значение которого не является примитивом, оно будет передано по ссылке. Для создания "настоящей копии" (полного клона объекта) можно воспользоваться методом из сторонней JavaScript-библиотеки [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
262
+
Чтобы создать "реальную копию" (клон), мы можем использовать `Object.assign` для так называемой "поверхностной копии" (вложенные объекты копируются по ссылке) или функцию "глубокого клонирования", такую как [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
0 commit comments