低开开发笔记(五):修bug-深拷贝与浅拷贝
好家伙
今天遇到一个bug
0.问题描述
描述如下:

代码如下:
copynodefunc() {
this.copynode = this.model.selected
},
affixnode() {
const id = this.model.selected.wid - 1;
const goodnode = this.copynode
this.dsl.children.splice(id, 0, goodnode);
this.numberreset();
},
1.问题分析
我么的model.selected长这个样子
{
"wid": 1,
"component": "ph-radio",
"props": {
"No": 1,
"title": "我是输入框",
"options_1": "选项一一",
"options_2": "选项二二"
},
"style": {
"top": "300px",
"left": "300px",
"zIndex": "1",
"border": "1px dashed red"
},
"attrs": {},
"events": {}
}
根据我多年开发bug的经验分析,这大概是引用出了问题
在上面的数据中,model.selected中的props是一个对象,估计在拷贝的时候没有进行深拷贝,拷贝的只是对象的引用
2.修改bug
于是,我们试着
将代码改为
copynodefunc() {
this.copynode = this.model.selected
},
affixnode() {
const id = this.model.selected.wid - 1;
const goodnode = {...this.copynode}
this.dsl.children.splice(id, 0, goodnode);
this.numberreset();
},
没什么用
又想到了我们的Object.assign(),但是,没有用,Object.assign()也是浅拷贝
所以,我们自己写一个深拷贝吧
3.深拷贝代码
export function deepCopy(obj) {
var objClone ={};
if (obj && typeof obj === "object") {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepCopy(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
代码解释如下:
这段代码定义了一个名为 deepCopy 的函数,用于实现深拷贝(deep copy)操作。深拷贝是指在拷贝对象时,不仅复制对象本身,还会递归复制对象内部的所有子对象,确保原对象和拷贝后的对象完全独立,互不影响。
下面是对代码的详细解释:
export function deepCopy(obj) { ... }:定义了一个导出的函数deepCopy,该函数接受一个参数obj,表示需要进行深拷贝的对象。var objClone = {};:初始化一个空对象objClone,用于存储深拷贝后的对象。if (obj && typeof obj === "object") { ... }:首先判断传入的参数obj是否存在且为对象类型,确保只对对象进行深拷贝操作。for (var key in obj) { ... }:使用for...in循环遍历对象obj的所有可枚举属性,其中key为当前属性的键名。if (obj.hasOwnProperty(key)) { ... }:通过hasOwnProperty方法判断当前属性是否为对象自身的属性,而非继承自原型链上的属性。if (obj[key] && typeof obj[key] === "object") { ... }:若当前属性的值是对象类型,则递归调用deepCopy函数进行深拷贝,将结果存储在objClone[key]中。else { objClone[key] = obj[key]; }:若当前属性的值不是对象类型,则直接将其赋给objClone[key],实现浅拷贝。return objClone;:返回深拷贝后的对象objClone。
总结:该函数通过递归的方式,对传入的对象进行深拷贝操作,确保拷贝后的对象与原对象完全独立。需要注意的是,该函数仅适用于处理普通对象,对于包含函数、原型链等特殊情况需要进行额外处理。
搞定。
低开开发笔记(五):修bug-深拷贝与浅拷贝的更多相关文章
- Django开发笔记五
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...
- 【python测试开发栈】—理解python深拷贝与浅拷贝的区别
内存的浅拷贝和深拷贝是面试时经常被问到的问题,如果不能理解其本质原理,有可能会答非所问,给面试官留下不好的印象.另外,理解浅拷贝和深拷贝的原理,还可以帮助我们理解Python内存机制.这篇文章将会通过 ...
- 流畅的python学习笔记第八章:深拷贝,浅拷贝,可变参数
首先来看赋值,浅拷贝,深拷贝. 一赋值: a=['word',2,3] b=a print id(a),id(b) print [id(x) for x in a] print [id(x) for ...
- Django开发笔记六
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...
- Django开发笔记四
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...
- Django开发笔记三
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.基于类的方式重写登录:views.py: from ...
- Django开发笔记二
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...
- Django开发笔记一
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.运行 python manage.py runser ...
- 《MFC游戏开发》笔记五 定时器和简单动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...
- Java开发笔记(六十五)集合:HashSet和TreeSet
对于相同类型的一组数据,虽然Java已经提供了数组加以表达,但是数组的结构实在太简单了,第一它无法直接添加新元素,第二它只能按照线性排列,故而数组用于基本的操作倒还凑合,若要用于复杂的处理就无法胜任了 ...
随机推荐
- hacker守则
hacker守则 永远不要相信用户的输入,任何输入数据在证明其无害之前,都是有害的 不在任何场景下谈论hacker 学习时,养成做笔记的好习惯 不谈论所有与hack相关的文章/ 电脑 / 电脑不要说 ...
- Springboot访问html页面
项目结构如图 1.html页面创建 在原有的项目resouces目录下创建static包,并在static下创建pages,然后在pages包下index.html. index.html内容 < ...
- springboot整合视频点播
1 //上传视频到阿里云 2 @Override 3 public String uploadAyl(MultipartFile file) { 4 try { 5 //accessKeyId,acc ...
- Java获取客户端IP地址进行记录
1.编写工具类IpUtils public class IpUtils { /** * 访问IP:0:0:0:0:0:0:0:1 * 访问IP:192.168.1.10 */ private stat ...
- debian12 出现Waiting for suspend/resume device ... Begin: Running /scripts/local-block ... done.
/etc/initramfs-tools/conf.d/resume里对应的交换分区的uuid不正确 删除/etc/initramfs-tools/conf.d/resume 再运行 sudo upd ...
- OpenHarmony 3.1 Release版本关键特性解析——HDI硬件设备接口介绍
HDF 驱动框架是 OpenAtom OpenHarmony(简称"OpenHarmony")系统硬件生态开放的基础,为驱动开发者提供了驱动加载.驱动服务管理和驱动消息机制等驱动框 ...
- Python设计模式----2.工厂模式
工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题 首先完全实现'开-闭 原则',实现了可扩展.其次更复杂的层次结构,可以应用于产品结果复杂的场合. 工厂方法模式的对简单工厂模式进行了抽象 ...
- HDC2021技术分论坛:酷炫3D效果在瘦设备上也能实现?
作者:zhuhuanhuan,图形技术专家 随着3D技术的应用普及,越来越多的场景都能看到3D的身影,比如充电动效.3D壁纸.游戏等等,给用户带来了更有趣.更丰富的体验.要满足用户的3D体验需求,离不 ...
- 为你推荐一款高效的IO组件——okio
原文:https://mp.weixin.qq.com/s/XnNhSq8ESoslb2DQEzMbCQ,点击链接查看更多技术内容. 前不久,三方组件库上新了一批JS/eTS组件,其中就包括oki ...
- Python 爬虫初探
准备部分 0x01 爬虫的简介和价值 a. 简介 自动抓取互联网数据的程序,是基础技术之一 b. 价值 快速提取网络中有价值的信息 0x02 爬虫的开发环境 a. 环境清单 Python3.7 开发环 ...