— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
copie superficială
copie superficială este o copie puțin înțeleaptă a unui obiect. Se creează un obiect nou care are o copie exactă a valorilor din obiectul original. Dacă oricare dintre câmpurile obiectului sunt referințe la alte obiecte, doar adresele de referință sunt copiate, adică numai adresa de memorie este copiată.o copie profundă copiază toate câmpurile și face copii ale memoriei alocate dinamic indicate de câmpuri., O copie profundă apare atunci când un obiect este copiat împreună cu obiectele la care se referă.
copie superficială: face o copie a referinței la X în Y. gândiți-vă la aceasta ca la o copie a adresei lui X. Deci, adresele X și Y vor fi aceleași, adică vor indica aceeași locație de memorie.
copie profundă: face o copie a tuturor membrilor X, alocă o locație de memorie diferită pentru Y și apoi atribuie membrii copiați La Y pentru a obține o copie profundă. În acest fel, Dacă x dispare Y este încă valabil în memorie.,termenul corect de utilizat ar fi clonarea, unde știți că ambele sunt total aceleași, dar totuși diferite (adică stocate ca două locații diferite în spațiul de memorie).luați în considerare acest exemplu:
var employeeDetailsOriginal = { name: 'Manjula', age: 25, Profession: 'Software Engineer' };
Să presupunem că doriți să creați un duplicat al acestuia, astfel încât, chiar dacă modificați valorile originale, puteți reveni întotdeauna la original.,
nu pot face acest lucru:
var employeeDetailsDuplicate = employeeDetailsOriginal; //Shallow copy!
Dacă ne-am schimba o valoare:
employeeDetailsDuplicate.name = 'NameChanged';
Această declarație va schimba, de asemenea, numele de employeeDetailsOriginal, din moment ce avem o copie superficială, sau o trimitere la var employeeDetailsOriginal. Asta înseamnă că pierzi și datele originale.
dar, creând o variabilă nouă folosind proprietățile din variabila originală employeeDetailsOriginal, puteți crea o copie profundă.acum, dacă schimbați employeeDetailsDuplicate.,numele, aceasta va afecta doar employeeDetailsDuplicate și nu employeeDetailsOriginal
Diagramatic exemplu
Deci, Cum de a copia obiect JavaScript pentru noua variabilă NU prin referință?
singura opțiune este să clonați cumva obiectul.
metoda javascript pur pentru a clona deep object
Leave a Reply