1.Verwenden Sie den Spread-Operator
const obj1 = { param: "value" };
const obj2 = { ...obj1 };
Der Spread-Operator nimmt alle Felder aus obj1 und verteilt sie über obj2. Im Ergebnis erhalten Sie ein neues Objekt mit einer neuen Referenz und denselben Feldern wie das ursprüngliche.
Denken Sie daran, dass es sich um eine flache Kopie handelt. Wenn ein Objekt verschachtelt ist, sind seine verschachtelten zusammengesetzten Parameter im neuen Objekt mit derselben Referenz vorhanden.
2.Object.assign ()
const obj1={ param: "value" };
const obj2:any = Object.assign({}, obj1);
Object.assign erstellt eine echte Kopie, jedoch nur eigene Eigenschaften, sodass Eigenschaften im Prototyp im kopierten Objekt nicht vorhanden sind. Es ist auch eine flache Kopie.
3.Object.create ()
const obj1={ param: "value" };
const obj2:any = Object.create(obj1);
Object.create führt kein echtes Klonen durch , sondern erstellt ein Objekt aus einem Prototyp. Verwenden Sie es daher, wenn das Objekt Eigenschaften des Primärtyps klonen soll, da die Zuweisung der Eigenschaften des Primärtyps nicht als Referenz erfolgt.
Pluspunkte von Object.create sind, dass alle im Prototyp deklarierten Funktionen in unserem neu erstellten Objekt verfügbar sind.
Einige Dinge über flache Kopien
Bei einer flachen Kopie werden alle Felder des alten in ein neues Objekt eingefügt. Wenn das ursprüngliche Objekt jedoch zusammengesetzte Felder (Objekt, Arrays usw.) enthält, werden diese Felder in ein neues Objekt mit denselben Referenzen eingefügt. Die Mutation eines solchen Feldes im ursprünglichen Objekt wird in einem neuen Objekt wiedergegeben.
Es sieht vielleicht wie eine Falle aus, aber eine Situation, in der das gesamte komplexe Objekt kopiert werden muss, ist selten. Flache Kopien verwenden den größten Teil des Speichers wieder, was bedeutet, dass dies im Vergleich zu tiefen Kopien sehr billig ist.
Tiefe Kopie
Der Spread-Operator kann für tiefe Kopien nützlich sein.
const obj1 = { param: "value", complex: { name: "John"}}
const obj2 = { ...obj1, complex: {...obj1.complex}};
Über dem Code wurde eine tiefe Kopie von obj1 erstellt. Das zusammengesetzte Feld "Komplex" wurde ebenfalls in obj2 kopiert. Das Mutationsfeld "komplex" spiegelt die Kopie nicht wider.