循环引用下的深度克隆
深度复制和浅度复制是当初初学 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规范
?
?
