1. Utilizzare l'operatore di diffusione
const obj1 = { param: "value" };
const obj2 = { ...obj1 };
L'operatore di diffusione prende tutti i campi da obj1 e li distribuisce su obj2. Nel risultato si ottiene un nuovo oggetto con un nuovo riferimento e gli stessi campi di quello originale.
Ricorda che è una copia superficiale, significa che se l'oggetto è nidificato, i suoi parametri compositi nidificati esisteranno nel nuovo oggetto con lo stesso riferimento.
2.Object.assign ()
const obj1={ param: "value" };
const obj2:any = Object.assign({}, obj1);
Object.assign crea una copia reale, ma solo proprietà proprie, quindi le proprietà nel prototipo non esistono nell'oggetto copiato. È anche una copia superficiale.
3.Object.create ()
const obj1={ param: "value" };
const obj2:any = Object.create(obj1);
Object.create non sta eseguendo la clonazione reale , sta creando l'oggetto dal prototipo. Quindi usalo se l'oggetto deve clonare le proprietà del tipo primario, perché l'assegnazione delle proprietà del tipo primario non viene eseguita per riferimento.
I vantaggi di Object.create sono che qualsiasi funzione dichiarata nel prototipo sarà disponibile nel nostro oggetto appena creato.
Poche cose sulla copia superficiale
La copia superficiale inserisce nel nuovo oggetto tutti i campi di quello vecchio, ma significa anche che se l'oggetto originale ha campi di tipo composito (oggetto, matrici ecc.), Tali campi vengono inseriti in un nuovo oggetto con gli stessi riferimenti. La mutazione di tale campo nell'oggetto originale verrà riflessa nel nuovo oggetto.
Sembra forse una trappola, ma la situazione reale in cui l'intero oggetto complesso deve essere copiato è rara. La copia superficiale riutilizzerà la maggior parte della memoria, il che significa che è molto economica rispetto alla copia profonda.
Copia profonda
L'operatore di diffusione può essere utile per la copia approfondita.
const obj1 = { param: "value", complex: { name: "John"}}
const obj2 = { ...obj1, complex: {...obj1.complex}};
Sopra il codice creato copia profonda di obj1. Anche il campo composito "complesso" è stato copiato in obj2. Il campo di mutazione "complesso" non rifletterà la copia.