扫码关注官方订阅号
关于这个函数在递归调用之后,怎么具体运行的。。
ringa_lee
啊咧,发现答非所问了...囧
你这里只是针对 Object 进行深拷贝(并没有考虑 function 和 Array),并且将原型链上的属性也拷贝到新实例上...(看起来有点儿奇怪...)
首先你要明确需要深拷贝哪些数据类型:比如你这段代码对于 Array 没有进行判断。
接着是递归的问题,如果循环引用了咋办?
还有要不要拷贝 prototype 上的属性? 比如这里就没有用 hasOwnProperty 限制。这样会一直从原型链向上查找...
最后还有 function,这个我觉得看需求,如果要在内存里保存两份儿方法,最好通过构造函数来生成实例。那么问题又来了,传哪些参数?╮(╯▽╰)╭
只要这个属性是引用类型,那么就继续调用copy函数,对这个引用类型属性进行处理,就这样一直下去,知道这个属性不是引用类型的,然后逐个出函数栈,这样你得到的就是一个深拷贝后的对象。
copy
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
啊咧,发现答非所问了...囧
你这里只是针对 Object 进行深拷贝(并没有考虑 function 和 Array),并且将原型链上的属性也拷贝到新实例上...(看起来有点儿奇怪...)
JavaScript 深拷贝我感觉是个大坑...
首先你要明确需要深拷贝哪些数据类型:比如你这段代码对于 Array 没有进行判断。
接着是递归的问题,如果循环引用了咋办?
还有要不要拷贝 prototype 上的属性? 比如这里就没有用 hasOwnProperty 限制。这样会一直从原型链向上查找...
最后还有 function,这个我觉得看需求,如果要在内存里保存两份儿方法,最好通过构造函数来生成实例。那么问题又来了,传哪些参数?╮(╯▽╰)╭
只要这个属性是引用类型,那么就继续调用
copy函数,对这个引用类型属性进行处理,就这样一直下去,知道这个属性不是引用类型的,然后逐个出函数栈,这样你得到的就是一个深拷贝后的对象。