JS 深度clone

以前就有看到过如何深度克隆一个对象,好久没写过面向对象的js了,都是在面向过程。。今天花了点时间理解如何使用原生js来实现深度克隆一个对象。
网上找了一些资料看,下面部分是转载过来的,部分是加上自己的理解和解释,以便以后忘记了。
不过还是有一些细节的地方没有清楚理解。。哪位大大可以帮忙指点一下就最好了

<SCRIPT language="JavaScript" type="text/JavaScript">
Object.prototype.Clone = function(){
    var objClone;
    if (this.constructor == Object){
        objClone = new this.constructor(); 
    }else{
        objClone = new this.constructor(this.valueOf()); 
    }
    for(var key in this){
        if ( objClone[key] != this[key] ){ 
            if ( typeof(this[key]) == 'object' ){ 
                objClone[key] = this[key].Clone();
            }else{
                objClone[key] = this[key];
            }
        }
    }
    objClone.toString = this.toString;
    objClone.valueOf = this.valueOf;
    return objClone; 
} 


//调用测试方法
function printMessage() {

function Person(name,age,gender) {
this.name=name;
this.age=age;
this.gender=gender;
this.friends={fisrt:'jerry',second:'franck',third:'jack'};
this.clickMe=function() {
alert('If you click me, I\'ll say: i\'m '+this.name+', Thank you!');
}
}

var p = new Person('xiaozhang','29','man');
var pAfterClone = p.Clone();
alert(p.name+"------"+pAfterClone.name);
alert(p.friends.second+"------"+pAfterClone.friends.second);
pAfterClone.friends.second= 'james';
alert(p.friends.second+"------"+pAfterClone.friends.second);


}

</SCRIPT>

  此外,还有一种对象克隆方法,比较简单,不过不能克隆下原对象的构造函数,所以并没有明确记录下来克隆后的对象是属于何种类型。代码如下:

function clone(oldObj){
     if(typeof oldObj != "object") return oldObj;
     if(oldObj == null) return olcObj;
     var newObj=new Object();
     for(var i in oldObj){
           newObj[i] = clone(oldObj[i]);
     }   
     return newObj;
}

 

posted @ 2012-12-13 15:06  晨风世界  阅读(356)  评论(0编辑  收藏  举报