深度克隆,递归

前几天被问到 深度递归,不太解,当时感觉是递归的用法。

搜索之后js里面也没深度递归这个说法,只看到深度克隆。再进一步,就是递归。


对象是传址引用,以前没怎么应用到复制一个对象的场景。不太了解如何复制。

刚结合深度递归,和js里面数据类型 特征,和网上下面的这段代码,突然悟到

既然,传址不能复制,那直接把你的属性都递归一遍,找到传值的类型数据属性,创建属性把值赋值过来就好了。

 

对比,dotnet,java的语言,这种复制本身被强类型的语言的内部给实现了。

js很强大,由于语言本身的特性,可以通过类似这样的方式,增加它的强类型语言的特性,实现完全的面向对象的功能。




代码
function clone(myObj)
{
    
if(typeof(myObj) != 'object'return myObj;
    
if(myObj == nullreturn myObj;
    var myNewObj 
= new Object();
    
for(var i in myObj) myNewObj[i] = clone(myObj[i]);
    
return myNewObj;
}


 

 



posted @ 2010-08-10 10:37  路口  阅读(355)  评论(0编辑  收藏  举报