객체를 복사하여 쓸일이 있는데 JS에도 얕은 복사와 깊은 복사의 의미를 갖는 각 방법이 존재하여 정리한다.
1. Object.assign()
객체의 프러퍼티가 key : value 구조를 이루며 value가 객체 또는 배열 구조가 아닌 경우에는 이 방법을 이용해도 좋다
하지만 value 값이 객체 또는 배열일 경우 값의 복사가 아닌 참조(포인터)값이 복사 되어 결국 값의 복사가아닌 참조를 하게 된다. (C언어 지식이 조금 필요)
clone_obj = Object.assign({}, default_obj);
// 이를 함수화 시키면 아래와 같다
function cloneObject(obj) {
return Object.assign({}, obj);
}
clone_obj = cloneObject(obj);
2. 재귀 호출
1번과 같은 방법을 사용하면 안되는 경우 아래와 같이 사용한다. 아래는 key: value 에서 value 값이 객체이건 배열이건 상관 없이 깊은 복사를 하게 된다.
function copy(obj){
let out,value,key;
out = Array.isArray(obj) ? [] : {};
for(key in obj){
value = obj[key];
out[key] = (typeof value ==="object" && value !==null) ? copy(value) : value;
}
return out;
}
Anuglar JS 공부 <6> - $apply(), $watch() 변화 감지 그리고 $eval(),$parse() (0) | 2019.03.04 |
---|---|
Anuglar JS 공부<*> - my directive (0) | 2019.02.21 |
Anuglar JS 공부 <5> - 상속 (0) | 2019.02.20 |
Anuglar JS 공부 <4> - module.directive (0) | 2019.02.19 |
Anuglar JS 공부 <3> - 양,단 방향 바인딩 (0) | 2019.02.18 |