什么是对象的深浅拷贝?怎么实现深浅拷贝?
首先,先了解深浅拷贝的含义:
浅拷贝就是通过简单地赋值的方式进行拷贝,那为什么说这是浅拷贝呢?就是因为赋值的方式只会把对象的表层赋值给一个新的对象,如果里面有属性值为数组或者对象的属性,那么就只会拷贝到该属性在栈空间的指针地址,新对象的这些属性数据就会跟旧对象公用一份,也就是说两个地址指向同一份数据,一个改变就会都改变。
深拷贝则不会出现上述问题,引用数据类型,它就会地址跟数据都会拷贝出来。
那么实现深拷贝就要会使用方法来实现:
1.通过递归函数来实现深拷贝
function myCopy(newObj, obj) {for(let key in obj) {if (obj[key] instanceof Array) {newObj[key] = []myCopy(newObj[key], obj[key])} else if (obj[key] instanceof Object) {newObj[key] = {}myCopy(newObj[key], obj[key])} else {newObj[key] = obj[key]}}
}
2.通过 json 实现深拷贝
function myCopy(obj) {let _obj = JSON.stringify(obj)let newObj = JSON.parse(_obj)return newObj
}
//接收返回值
let newObject = myCopy(obj)
3.通过jQuery封装的方法实现深拷贝
$.extend(true, newObj, obj)
什么是对象的深浅拷贝?怎么实现深浅拷贝?相关推荐
- 17.深浅拷贝和写时拷贝
深浅拷贝 浅拷贝只拷贝指针,但拷贝后两个指针指向同一个内存空间: 深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针指向两个不同地址. 当类成员不包括指针何引用时,浅拷贝并无问题 ...
- 【C++grammar】析构、友元、拷贝构造函数、深浅拷贝
目录 1.Destructor(析构函数) 在堆和栈(函数作用域与内嵌作用域)上分别创建Employee对象,观察析构函数的行为 2.Friend(友元) 1.为何需要友元 2.友元函数和友元类 3. ...
- 拷贝赋值函数、拷贝构造函数
拷贝构造函数 也是构造函数的一种,常用来以另一对象为模板创建新对象.如果对象中没有指针,可以直接使用数据库自带的该函数,但有指针就需要自己构建,这是为了避免造成浅拷贝,使两个指针指向同一内存空间. 例 ...
- 【Android RTMP】x264 图像数据编码 ( NV21 格式中的 YUV 数据排列 | Y 灰度数据拷贝 | U 色彩值数据拷贝 | V 饱和度数据拷贝 | 图像编码操作 )
文章目录 安卓直播推流专栏博客总结 一. NV21 图像数据中的 YUV 数据简介 二.向 x264 编码图片 三. 提取 NV21 数据中的灰度数据 Y 四. 提取 NV21 数据中的饱和度数据 U ...
- 拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元
1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: ...
- nio java 内核拷贝_大文件拷贝,试试NIO的内存映射
最近项目里有个需求需要实现文件拷贝,在java中文件拷贝流的读写,很容易就想到IO中的InputStream和OutputStream之类的,但是上网查了一下文件拷贝也是有很多种方法的,除了IO,还有 ...
- Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支
1.背景 想拷贝代码到内网开发环境,因为网速很慢,所以希望Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支.因为我直接拷贝压缩一个项目居然有1G的内容, 2.重要步骤 复制一个项目,拷贝粘贴 3. ...
- java的深浅拷贝_Java中深浅拷贝
一,浅拷贝 ①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象.因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得 ...
- php深浅拷贝,js实现深浅拷贝方法
说起深浅拷贝,我觉得需要理清楚 值类型 和 引用类型,本文主要和大家分享js实现深浅拷贝方法,希望能帮助到大家. 值类型 所谓 值类型 就是 undefined,null,number, string ...
- python怎么设置颜色深浅变化_python之深浅拷贝
python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果,其实这个是由于共享内存导致的结果 拷贝:原则上就是把数据分离出来,赋值其数据,并以后修改互不影 ...
最新文章
- 重磅官宣:评职称将不做论文数量硬性要求!职称改革任务总体完成
- c++ lua 可以做什么_Redis令牌桶算法(全网最全,后续可以接入lua做原子性操作)...
- [转]用C#编写ActiveX控件(一)
- 最难学的十大编程语言,Java排第二,它竟是第一名!
- java hung_java – Hung JVM消耗100%的CPU
- 巧改注册表拥有超级cpu
- 一线Java架构师概括互联网公司的标准Java技术架构
- 基于JAVA+SpringMVC+Mybatis+MYSQL的公司管理系统
- python解析json传入变量_Python 使用 docopt 解析json参数文件过程讲解
- Android P:BottomAppBar和MaterialButton
- 已开源|码上用它开始Flutter混合开发——FlutterBoost
- Linux开发_最全在Ubnutu环境下为你的程序设置快捷启动项和启动时管理员权限
- C语言进制转换 10进制转16进制(一)
- java中while的用法案例_Java While循环 do-while循环用法
- Revit二开--删除所有导入cad文件
- 面纱星云的西面纱中的女巫帚星云
- 【1小时记住Docker常用命令】Docker学以致用
- (10.2.3.3)静电的设计教室:APP设计利器Sketch教程(03)-让插件助你一臂之力(原创
- win10系统连接wifi后可以上网但是显示【无Internet,安全】解决 and Maple初始化失败问题
- python大写数字转阿拉伯数字脚本
热门文章
- virtuso版图_学习了解cadence virtuoso版图设计
- 不可不学的摄影技巧.4——后期处理
- 天梯赛 L2-030 冰岛人 (25 分)
- 宝塔面板——超牛逼的服务器管理软件+百度云端口组放行
- 数据分析从零到精通第七课 快速面试与入职
- [软件评测第十三期]echo回声
- 球球大作战测试服android版,球球大作战6.0
- Golang + Laya引擎实现的简易版“球球大作战”小游戏
- 【Lifelong learning】Lifelong Language Knowledge Distillation
- 【STM32】STM32 startup启动文件选择