shallow Copy 와 Deep Copy 의 위험성 Object.assign
2018. 8. 31. 15:49ㆍ프로그래밍/Jscript
Object.assign 의 위험성.
다음 object in object 복제는 안된다는..
일명 shallow Copy 와 Deep Copy
Shallow Copy 를 피하려고 Object.assign 을 사용하였으나 이중적인 object in object 구조시 shallow copy 가 되어버린..
일반적인 방식은 다음과 같다.
let obj = {
a: 1,
b: 2,
};
let objCopy = Object.assign({}, obj);
console.log(objCopy); // result - { a: 1, b: 2 }
objCopy.b = 80;
console.log(objCopy); // result - { a: 1, b: 80 }
console.log(obj); // result - { a: 1, b: 2 }
그러나 obj 다음과 같은 구조시에는 우리가 원하지 않는 값으로 나옴
let obj = {
a: 1,
b: {
c: 2,
},
}
let newObj = Object.assign({}, obj);
console.log(newObj); // { a: 1, b: { c: 2} }
obj.a = 10;
console.log(obj); // { a: 10, b: { c: 2} }
console.log(newObj); // { a: 1, b: { c: 2} }
newObj.a = 20;
console.log(obj); // { a: 10, b: { c: 2} }
console.log(newObj); // { a: 20, b: { c: 2} }
newObj.b.c = 30;
console.log(obj); // { a: 10, b: { c: 30} }
console.log(newObj); // { a: 20, b: { c: 30} }
// Note: newObj.b.c = 30; Read why..
b.c 가 하나만 바꿔야 되지만 둘다 바뀌는 문제가 된다.
그래서 이야기하는건 다음과 같은 함수를 -_-;; 쓰자라는 것 ㅋㅋ
function cloneObject(obj) {
var clone = {};
for(var i in obj) {
if(obj[i] != null && typeof(obj[i])=="object")
clone[i] = cloneObject(obj[i]);
else
clone[i] = obj[i];
}
return clone;
}
'프로그래밍 > Jscript' 카테고리의 다른 글
SVG를 이용한 Timer (0) | 2018.05.23 |
---|---|
addEventListener에 Function 이름을 parameter로 호출하기 (0) | 2017.10.23 |
Javascript Animation 관련 (0) | 2017.07.26 |
DRAG EVENT 관련 (0) | 2017.07.20 |
WINDOW DPI 에 대한 EVENT MOUSE POSITION 관련 (0) | 2017.07.20 |