— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Shallow copy
Shallow copy jest bitową kopią obiektu. Tworzony jest nowy obiekt, który ma dokładną kopię wartości w oryginalnym obiekcie. Jeżeli którekolwiek z pól obiektu jest odniesieniami do innych obiektów, kopiowane są tylko adresy referencyjne, tzn. kopiowany jest tylko adres pamięci.
Głębokie kopiowanie
Głębokie kopiowanie kopiuje wszystkie pola i tworzy kopie dynamicznie przydzielanej pamięci wskazywanej przez pola., Głęboka Kopia występuje, gdy obiekt jest kopiowany wraz z obiektami, do których się odnosi.
Shallow Copy: tworzy kopię odniesienia do X NA Y. pomyśl o tym jako o kopii adresu X. Tak więc adresy X i Y będą takie same, tzn. będą wskazywać na to samo miejsce pamięci.
Deep copy: tworzy kopię wszystkich członków X, przydziela różne miejsca pamięci dla Y, a następnie przypisuje skopiowane elementy do Y, aby uzyskać głęboką kopię. W ten sposób, Jeśli x znika, Y jest nadal ważne w pamięci.,
poprawnym terminem byłoby klonowanie, gdzie wiadomo, że oba są CAŁKOWICIE takie same, ale jednak różne (tzn. przechowywane jako dwa różne miejsca w przestrzeni pamięci).
rozważ ten przykład:
var employeeDetailsOriginal = { name: 'Manjula', age: 25, Profession: 'Software Engineer' };
Załóżmy, że chcesz utworzyć duplikat tego, aby nawet jeśli zmienisz oryginalne wartości, zawsze możesz wrócić do oryginału.,
mogę to zrobić:
var employeeDetailsDuplicate = employeeDetailsOriginal; //Shallow copy!
jeśli zmienimy wartość:
employeeDetailsDuplicate.name = 'NameChanged';
To polecenie zmieni również nazwę z employeeDetailsOriginal, ponieważ mamy płytką kopię lub odniesienie do var employeeDetailsOriginal. Oznacza to, że tracisz również oryginalne dane.
ale, tworząc zupełnie nową zmienną za pomocą właściwości z oryginalnej zmiennej employeeDetailsOriginal, można utworzyć głęboką kopię.
teraz jeśli zmienisz pracodawcę.,nazwa, wpłynie tylko na employeeDetailsDuplicate, a nie employeeDetailsOriginal
przykład Diagramowy
więc jak skopiować obiekt JavaScript do nowej zmiennej nie przez odniesienie?
jedyną opcją jest sklonowanie obiektu.
Pure JavaScript method to deep clone object
Leave a Reply