首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

循环引用上的深度克隆

2012-08-29 
循环引用下的深度克隆深度复制和浅度复制是当初初学 c 遇到的第一批问题,似乎使不少人困惑,而类 c 的 java

循环引用下的深度克隆

深度复制和浅度复制是当初初学 c 遇到的第一批问题,似乎使不少人困惑,而类 c 的 javascript 也同样存在这个问题.

?

?

第一版:

?

javascript 中引用类型(Object.prototype.toString.call(object))有 : Array 以及 Object , Date , RegExp ,Number, Function,Boolean .而可以修改自身的包括:

?

Array : 可修改自身单个元素

?

Object : 可修改自身单个属性

?

Date : 可修改自身日期,年份等

?

RegExp : 可修改 lastIndex

?

而对于基本类型的包装类型如:new Boolean() ,new Number() 虽然没有方法改变自身值,但是可能在上面附加数据,所以最好还是考虑下。

?

?

然后细心点进行深度复制:

?

那么 clone=S.clone(t7) 的结果应该和 t7 内容一样并且包含关系完全相同即:

?

?

循环引用上的深度克隆

?

?

?

不足:

?

该算法只适用于配置参数等简单数据类型克隆,对于具备复杂原型链的自定义对象尚不能很好支持,或许可以通过

?

ret=new o.constructor()
?

来生成对应类型对象,但是由于执行了构造器或存在副作用.

?

?

Refer:

?

?

原来已经有规范了,不过如果出现 HTMLNode function 就报错的做法不妥?:

?

结构化数据克隆html5规范

?

?

热点排行