본문 바로가기
JavaScript

javascript clone object - deep copy

by SSaMKJ 2014. 1. 14.

자바 스크립트 object를 전달한다는 의미는 value를 전달하는 것이 아닌 reference를 전달한다는 의미이다.


child window에서 opener로 넘기고 해당 child window를 닫아 버리면 opener에서는 해당 객체의 reference를 잃어 버려서 에러가 생기기도 한다.


받자마자 반드시 clone 객체로 만들어서 opener window에서 객체를 가지고 있어야만 child window를 닫아도 이상이 없다.



//object의 보다 정확한 타입을 얻을 때 사용.
function getType(obj) {
    var objectName = Object.prototype.toString.call(obj);
    var match = /\[object (\w+)\]/.exec(objectName);
    return match[1].toLowerCase();
}
//object의 내용을 복사해서 넘겨준다.
function getClone(obj){

    if (null == obj || "object" != typeof obj) return obj;

    if (getType(obj) ==  'date') {
        var copy = new Date();
        copy.setTime(obj.getTime());
        return copy;
    }

    if (getType(obj) == 'array') {
        var copy = [];
        for (var i = 0, len = obj.length; i < len; i++) {
            copy[i] = this.getClone(obj[i]);
        }
        return copy;
    }

    if (getType(obj) == 'object') {
        var copy = {};
        for (var attr in obj) {
            if (obj.hasOwnProperty(attr)) copy[attr] = this.getClone(obj[attr]);
        }
        return copy;
    }

    return obj;

}

>나를 위한 저장을 한다.


'JavaScript' 카테고리의 다른 글

pure javascript input 에 숫자만 입력 받기.  (0) 2014.06.20
inputbox 공격 스크립트  (0) 2014.01.29
window.open post 방식으로 띄우기  (0) 2013.12.29
자바스크립트 모듈 패턴  (12) 2013.10.02
console log 찍기.  (0) 2013.07.26

댓글