1. Użyj operatora rozprzestrzeniania
const obj1 = { param: "value" };
const obj2 = { ...obj1 };
Operator rozłożenia pobiera wszystkie pola z obj1 i rozkłada je na obj2. W rezultacie otrzymujesz nowy obiekt z nowym odniesieniem i tymi samymi polami, co oryginalny.
Pamiętaj, że jest to płytka kopia, oznacza to, że jeśli obiekt jest zagnieżdżony, to jego zagnieżdżone parametry złożone będą istniały w nowym obiekcie przez to samo odniesienie.
2.Object. assign ()
const obj1={ param: "value" };
const obj2:any = Object.assign({}, obj1);
Object.function tworzy prawdziwą kopię, ale tylko własne właściwości, więc właściwości w prototypie nie będą istnieć w kopiowanym obiekcie. Jest to również płytka kopia.
3.Object.create ()
const obj1={ param: "value" };
const obj2:any = Object.create(obj1);
Object.create nie dokonuje prawdziwego klonowania , ale tworzy obiekt z prototypu. Dlatego użyj go, jeśli obiekt powinien klonować właściwości typu podstawowego, ponieważ przypisanie właściwości typu podstawowego nie jest wykonywane przez odwołanie.
Plusy Object.create to, że wszelkie funkcje zadeklarowane w prototypie będzie dostępny w naszym nowo utworzonego obiektu.
Kilka rzeczy o płytkiej kopii
Płytka kopia umieszcza w nowym obiekcie wszystkie pola starego, ale oznacza to również, że jeśli oryginalny obiekt ma pola typu złożonego (obiekt, tablice itp.), To te pola są umieszczane w nowym obiekcie z tymi samymi odniesieniami. Mutacja takiego pola w oryginalnym obiekcie zostanie odzwierciedlona w nowym obiekcie.
Może to wygląda na pułapkę, ale tak naprawdę sytuacja, w której cały złożony obiekt wymaga skopiowania, jest rzadkością. Płytka kopia ponownie wykorzysta większość pamięci, co oznacza, że jest bardzo tania w porównaniu do głębokiej kopii.
Głęboka kopia
Operator rozprzestrzeniania może być przydatny w przypadku głębokiego kopiowania.
const obj1 = { param: "value", complex: { name: "John"}}
const obj2 = { ...obj1, complex: {...obj1.complex}};
Powyższy kod utworzył głęboką kopię obj1. Pole złożone „złożone” zostało również skopiowane do obj2. Pole mutacji „złożone” nie będzie odzwierciedlać kopii.