Skip to content

手写深拷贝

来源:js/实现/拷贝.htmljs/实现/new.html,手写实现对象的深拷贝。

速查导航


浅拷贝 vs 深拷贝

js
js

基础实现

递归遍历对象,对每个属性判断是否为对象类型:

js

问题: for...in 会遍历原型链上的属性,需要 hasOwnProperty 过滤。


完善版

js

局限性(基础版):

  • 无法处理 DateRegExpMapSet 等特殊对象
  • 无法处理循环引用(会栈溢出)
  • function 只拷贝引用,不会创建新函数
  • 完整版需引入 WeakMap 处理循环引用,以及针对特殊对象类型分别处理