У меня есть функция, которая возвращает другой объект, и мне нужны некоторые клоны этого объекта для работы с ним. Объект сложен со свойствами массива, и я хочу, чтобы он был произвольным, как я хочу, без ограничений для любого типа данных.
Но когда я это делаю, это становится одинаковой ссылкой на оба объекта, и одинаковые изменения влияют на оба.
После изучения проблемы я обнаружил, что если объект, возвращенный из функции, находится в глобальной области видимости JS, то это будет та же ссылка, но если она является локальной для функции, она будет новой.
Например, см. Код. Х и у одинаковы, когда я назначаю их из func1 , но когда я использую func2 , каждый из них является другим.
Я пытаюсь избавить от необходимости выполнять глубокое копирование объекта с помощью 3-х инструментов или вручную, с помощью собственной сервисной функции.
Есть ли простое решение этой проблемы, и я буду рад узнать, чему научиться, понять это.
Спасибо.
let obj1 = {
a:"Ay",
b: "Bi"
}
function func1(){
return obj1;
}
let x = func1 ();
let y = func1();
console.log(x , y);
x.a = "new value1 ";
console.log(x , y);
//both x & y changed
function func2(){
let obj2 = {
a:"Ay",
b: "Bi"
}
return obj2;
}
x = func2 ();
y = func2();
console.log(x , y);
x.a = "other value1 ";
console.log(x , y);
//only x have changed