— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Grunt kopia
Grunt kopia är en bitvis kopia av ett objekt. Ett nytt objekt skapas som har en exakt kopia av värdena i det ursprungliga objektet. Om något av fälten i objektet är referenser till andra objekt, kopieras bara referensadresserna, dvs endast minnesadressen kopieras.
Deep copy
en djup kopia kopierar alla fält och gör kopior av dynamiskt tilldelat minne pekat på av fälten., En djup kopia uppstår när ett objekt kopieras tillsammans med de objekt som det refererar till.
Grunt kopia: det gör en kopia av hänvisningen till X till Y. Tänk på det som en kopia av X: s adress. Så, adresserna till X och Y kommer att vara desamma, dvs de kommer att peka på samma minnesplats.
Deep copy: det gör en kopia av alla medlemmar i X, allokerar olika minnesplats för Y och tilldelar sedan de kopierade medlemmarna till Y för att uppnå djup kopia. På detta sätt, om X försvinner Y är fortfarande giltigt i minnet.,
den korrekta termen att använda skulle vara kloning, där du vet att de båda är helt desamma, men ändå olika (dvs lagras som två olika platser i minnesutrymmet).
Tänk på det här exemplet:
var employeeDetailsOriginal = { name: 'Manjula', age: 25, Profession: 'Software Engineer' };
låt oss säga att du vill skapa en dubblett av detta, så att även om du ändrar de ursprungliga värdena kan du alltid återgå till originalet.,
Jag kan göra detta:
var employeeDetailsDuplicate = employeeDetailsOriginal; //Shallow copy!
om vi ändrar ett värde:
employeeDetailsDuplicate.name = 'NameChanged';
detta uttalande kommer också att ändra namn från employeeDetailsOriginal, eftersom vi har en grund kopia, eller en hänvisning till var employeeDetailsOriginal. Det betyder att du förlorar originaldata också.
men genom att skapa en helt ny variabel med hjälp av egenskaperna från den ursprungliga employeedetailsoriginalvariabeln kan du skapa en djup kopia.
Nu om du ändrar employeeDetailsDuplicate.,det påverkar endast employeeDetailsDuplicate och inte employeeDetailsOriginal
Diagramatiskt exempel
så här kopierar du JavaScript-objekt till ny variabel som inte är referens?
ditt enda alternativ är att på något sätt klona objektet.
ren javascript-metod för att djupt klona objekt
Leave a Reply