【JS第1期】深拷贝实现原理
首先,从copy开始说,简而言之,copy的目的就是生成一个新的实例,然后把其成员都按原实例赋值。对于非指针型的成员,比如boolern、String、Number等,这样的赋值可以直接进行。但是对于指针型的数据,比如Object,就有深拷贝和浅拷贝的区别。我们接下来通过示例来进行介绍:
浅拷贝
// demo1.js
var obj = {name: 'bill',sex: '1',getName: function() {return this.name;},config: {birstary: '1992-02-02',isTrue: true}
}function copy(obj) {var o = {}for (let i in obj) {o[i] = obj[i] }return o;
}
var obj2 = copy(obj);
obj2.name = 'bill2'
obj2.config.isTrue = false
console.log(obj2)
console.log(obj)
复制代码
通过demo1.js我们可以了解到,我们修改了obj2的属性name,以及obj2中config对象内的属性isTrue。打印查看结果后发现,obj的config对象内的属性isTrue也跟着变了。这是因为config是一个对象,我们在copy的时候只是将config对象的指针进行了拷贝,而原对象并没有进行拷贝。所以,如果我们想修改obj2的config对象内的属性而不影响obj的话我们就需要深拷贝,具体实现如下:
var obj = {name: 'bill',sex: '1',getName: function() {return this.name;},config: {birstary: '1992-02-02',isTrue: true}
}function copy(obj) {var o = {}for (let i in obj) {if (obj[i].toString() == '[object Object]') {var obj2 = copy(obj[i])o[i] = obj2;} else {o[i] = obj[i]}}return o;
}
var obj2 = copy(obj);
obj2.name = 'bill2'
obj2.config.isTrue = false
console.log(obj2)
console.log(obj)
复制代码
我们运用递归的方法,检测是否是Obejct。如果不是直接赋值,如果是,我们再对Object进行拷贝。
【JS第1期】深拷贝实现原理相关推荐
- python深拷贝实现原理,js递归实现深拷贝
经过小编之前关于JavaScript深拷贝实现方式的介绍,大家已经知道深拷贝能够实现真正意义上的数组和对象的拷贝.其实使用内置对象JSON虽然简答,但不能将对对象的方法深拷贝,因此使用递归的方式就是最 ...
- php new对象 调用函数,关于JS中new调用函数的原理介绍
这篇文章主要介绍了关于JS中new调用函数的原理介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 JavaScript 中经常使用构造函数创建对象(通过 new 操作符调用一个函数) ...
- ZooKeeper学习第七期--ZooKeeper一致性原理
ZooKeeper学习第六期---ZooKeeper机制架构 ZooKeeper学习第一期---Zookeeper简单介绍 ZooKeeper学习第二期--ZooKeeper安装配置 ZooKeepe ...
- JS原型链与instanceof底层原理
转载自 JS原型链与instanceof底层原理 一.问题: instanceof 可以判断一个引用是否属于某构造函数: 另外,还可以在继承关系中用来判断一个实例是否属于它的父类型. 老师说:ins ...
- [js] fetch和axios请求的原理都是基于XMLHttpRerequst吗?
[js] fetch和axios请求的原理都是基于XMLHttpRerequst吗? axios是基于XMLHttpRequest的封装,而fetch是js原生支持的网络请求api,这在浏览器底层进行 ...
- js中的浅拷贝深拷贝深入理解
举个例子来说明一下什么是浅拷贝什么是深拷贝 浅拷贝 var x = {a: 1,b: {f: {g: 1}},c: [1, 2, 3] }; var y = shallow(x); 得出的结果可以看出 ...
- js事件委托(事件代理)的原理以及优缺点
js事件委托/事件代理的原理以及优缺点 什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上 ...
- 图形化开发(一)——D3.js的基本介绍、技术原理
图形化开发(一)--D3.js的基本介绍.技术原理 D3.js 为什么学习D3 中文官网--https://www.d3js.org.cn/ github--https://github.com/d3 ...
- js计算生理期代码怎么写
js计算生理期代码怎么写,js实现生理期计算方法教程如下: 1.输入上次月经日期 2.输入平均月经周期 计算结果:计算出对应排卵期.安全期和月经期 js实现代码: function Calculate ...
最新文章
- php定时爬虫,thinkphp5使用workerman定时器定时爬取站点内容的代码
- 观咆哮有感——系统升级的疼
- numpy.random.uniform()
- Oracle 11g系统自动收集统计信息
- leetcode 208 python3
- P3930 SAC E#1 - 一道大水题 Knight
- Oracle数据库中NOLOGGING和FORCE LOGGING
- 百度文档免费下载+PDF转word
- Python爬虫,超简单地实现一键提取阴阳师原画
- Windows NT引导过程源代码分析(一)
- 【C/C++基础进阶系列】实战记录 -- Dump 文件生成与分析
- 砍价两种种算法(转载)
- 三位数求最大公因数c语言,求最大公因数的三种算法
- 神犇营-my1002-朋友圈集赞
- VMware创建虚拟机时出现 network bot from intel e1000
- C#工业触摸屏上位机源码 替代传统plc搭载的触摸屏
- 计算构成三角形的个数
- 基于web的学生管理系统(一)简介
- Dell XPS15 4K GTX1050 ubuntu16.04系统安装+分辨率设置
- 山东大学软件学院2019软件测试考试回忆
热门文章
- 递推+矩阵快速幂 HDU 2065
- “见识”很重要 记一起Oracle的SQL调整
- dp、px之间单位转换Util
- Servlet 表单数据笔记
- directx最终用户运行时_WSL将支持GPU计算,并可运行Linux GUI应用
- activate tensorflow_“量子固件”来了!利用 TensorFlow 提升量子计算硬件性能
- 从敲下一行JS代码到这行代码被执行,中间发生了什么?
- ES6系列:什么是ES6? 新手应该怎么理解
- 现在加入Web前端学习还有市场吗?自己是否适合学习前端
- json在java中的使用_在Java中使用JSON