— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
얕은 사본
단순 복사본은 비트의 사본 개체입니다. 원래 개체에 있는 값의 정확한 복사본이 있는 새 개체가 만들어집니다. 객체의 필드 중 하나가 다른 객체에 대한 참조 인 경우 참조 주소 만 복사됩니다 즉,메모리 주소 만 복사됩니다.
딥 카피
딥 카피는 모든 필드를 복사하고 필드가 가리키는 동적으로 할당 된 메모리의 복사본을 만듭니다., 깊은 복사는 객체가 참조하는 객체와 함께 복사 될 때 발생합니다.
얕은 복사:X 에 대한 참조 사본을 Y 로 만듭니다.x 의 주소 사본으로 생각하십시오. 따라서 X 와 Y 의 주소는 동일한 메모리 위치를 가리킬 것입니다.
딥 복사:X 의 모든 멤버의 복사본을 만들고 Y 에 대해 다른 메모리 위치를 할당 한 다음 복사 된 멤버를 y 에 할당하여 딥 복사를 달성합니다. 이 방법으로 X 가 사라지면 Y 는 여전히 메모리에서 유효합니다.,
정확한 용어를 사용 하는 것 복제,어디에 당신이 알고 있는 그들은 모두 완전히 동일한지만,아직 다른(즉,으로 저장되는 두 개의 서로 다른 위치에서 메모리 공간).
다음 예제를 살펴보십시오:
var employeeDetailsOriginal = { name: 'Manjula', age: 25, Profession: 'Software Engineer' };
말할의 중복을 만들도록 이것을 변경하는 경우에도 원래 값을 가지고,당신은 항상 수 있습니다.,
I 작업을 수행 할 수 있습니다:
var employeeDetailsDuplicate = employeeDetailsOriginal; //Shallow copy!
경우는 변경 값:
employeeDetailsDuplicate.name = 'NameChanged';
이 문을 것입니다 또한 이름을 변경에서 employeeDetailsOriginal 고 있기 때문에 우리는 얕은 복사하거나,참조하 var employeeDetailsOriginal. 즉,원본 데이터도 잃어 버리고 있습니다.
그러나 원래 employeeDetailsOriginal 변수의 속성을 사용하여 새로운 변수를 만들면 딥 복사본을 만들 수 있습니다.
이제 employeeDetailsDuplicate 를 변경하면.,이름 그것에 영향을 미칠 것입니 employeeDetailsDuplicate 지 employeeDetailsOriginal
Diagramatic 예
그래서 복사하는 방법을 자바스크립트 개체하는 새로운 변수여 기준?
당신의 유일한 옵션은 어떻게 든 객체를 복제하는 것입니다.
깊은 복제 객체에 대한 순수 자바 스크립트 메소드
Leave a Reply