Appearance
手写深拷贝
来源:
js/实现/拷贝.html、js/实现/new.html,手写实现对象的深拷贝。
速查导航
- 浅拷贝 vs 深拷贝 — 区别与场景
- 基础实现 — 递归遍历
- 完善版 — hasOwnProperty 过滤原型属性
浅拷贝 vs 深拷贝
js
js
基础实现
递归遍历对象,对每个属性判断是否为对象类型:
js
问题:
for...in会遍历原型链上的属性,需要hasOwnProperty过滤。
完善版
js
局限性(基础版):
- 无法处理
Date、RegExp、Map、Set等特殊对象- 无法处理循环引用(会栈溢出)
function只拷贝引用,不会创建新函数- 完整版需引入
WeakMap处理循环引用,以及针对特殊对象类型分别处理