mishe / blog

前端碰上的问题或体会
230 stars 39 forks source link

JS深拷贝碰到的问题--后续 #156

Open mishe opened 7 years ago

mishe commented 7 years ago

上期 #155 讲了js 深拷贝的简单实现方法,还留了个尾巴,没有解决对象重复引用的问题

重复引用会有什么问题

例子1:

var obj={
a:1
}
obj.b=obj

例子2:

o1={a:1};o2={a:o1};o3={a:o2};o1.a=o3
}

这时去做深拷贝,会陷入无限递归。

怎么解决

对象本身就是树形结构,可以用一个数组来保存当前枝叶链上的所有object,如果下层枝叶又引用上层的obj,那就直接赋值,而不是采用递归,从而打破无限递归的深渊。

【具体实现代码】