— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
sekély copy
a sekély másolat egy objektum kissé bölcs példánya. Egy új objektum jön létre, amely az eredeti objektum értékeinek pontos másolatát tartalmazza. Ha az objektum bármelyik mezője más objektumokra utal,akkor csak a referenciacímeket másolja, azaz csak a memória címét másolja.
Deep copy
a deep copy lemásolja az összes mezőt, és a mezők által mutatott dinamikusan kiosztott memória másolatait készíti el., Egy mély másolat akkor fordul elő, amikor egy objektumot lemásolnak azokkal az objektumokkal együtt, amelyekre utal.
sekély másolat: az X-re való hivatkozás másolatát Y-ra teszi. Tehát az X és Y címei ugyanazok lesznek, azaz ugyanarra a memóriahelyre mutatnak.
Deep copy: az X összes tagjának másolata, különböző memóriahelyeket oszt ki az Y számára, majd a másolt tagokat Y-ra osztja a mély másolat eléréséhez. Ily módon, ha X eltűnik Y továbbra is érvényes a memóriában.,
a helyes kifejezés a klónozás lenne, ahol tudod, hogy mindkettő teljesen azonos, de mégis más (azaz két különböző helyként tárolva a memóriában).
Tekintsük ezt a példát:
var employeeDetailsOriginal = { name: 'Manjula', age: 25, Profession: 'Software Engineer' };
tegyük fel, hogy ennek másolatát szeretné létrehozni, így még akkor is, ha megváltoztatja az eredeti értékeket, mindig visszatérhet az eredetihez.,
ezt megtehetem:
var employeeDetailsDuplicate = employeeDetailsOriginal; //Shallow copy!
ha megváltoztatunk egy értéket:
employeeDetailsDuplicate.name = 'NameChanged';
Ez a kijelentés megváltoztatja a nevét az employeedetails-tőleredeti, mivel van egy sekély példányunk, vagy hivatkozás a var employeeDetailsOriginal. Ez azt jelenti, hogy elveszíti az eredeti adatokat is.
de egy teljesen új változó létrehozásával az eredeti employeeDetailsOriginal változó tulajdonságai segítségével létrehozhat egy mély példányt.
most, ha megváltoztatja employeeDetailsDuplicate.,név, ez csak az employeeDetailsDuplicate-t érinti, nem pedig az employeeDetailsOriginal
Diagramatic example
tehát hogyan lehet A JavaScript objektumot új változóra másolni, nem hivatkozással?
az egyetlen lehetőség az, hogy valahogy klónozza az objektumot.
Pure javascript method to deep clone object
Leave a Reply