视频中老师所讲的浅拷贝不太懂

来源:3-5 变量比较和值的复制

_小怪

2019-08-04 21:39:40

新的对象的每一个属性是原来对象里面一个个的基本类型的拷贝,但是这两个对象不是不同的嘛,不应该是在堆中是两个不同的对象吗?看问答区老师为什么说这两个对象指向的是同一个地址呢?

写回答

3回答

好帮手慕码

2019-08-06

同学你好!

(1)你的理解是对的,放在堆里被引用

(2)新对象newobj是存在堆里的,里面的各种内容也是在堆里(放在newobj的实体里,newobj的实体放在堆里,所以新对象里面的数据也在堆里)可以看下这个图:

http://img.mukewang.com/climg/5d49520200012c3705280292.jpg

http://img.mukewang.com/climg/5d49520a00015bad01700110.jpg

(3)因为是浅拷贝,所以不会影响另一个

(4)obj的key,value是放在堆里的,指向栈中

现阶段中,同学只要了解基本类型在栈里,引用类型在堆里即可,随着编程经验的积累,也会对这个内存有更加深刻的理解哦

如果帮助到了你 欢迎采纳 祝学习愉快~

0

好帮手慕码

2019-08-05

同学你好!

是的newObject在堆内存开了一个新空间。浅拷贝:只复制引用,而未复制真正的值。

http://img.mukewang.com/climg/5d47927a0001c42704670446.jpg

视频里通过封装的这个copyObj方法:将传入的对象obj遍历,每个属性和值重新赋值给了一个新的对象newObj,这样newObj和原来的obj对象中的内容就一致了,两个对象指向的是同一个地址,但是两个对象是不相等的(只复制一层引用,并没有进行深拷贝:对目标内容的完全拷贝)。

这块比较抽象,一时半会不理解的话建议同学可以等积累一定的编程经验之后再回过头来看下。到时候会比较好理解的多

如果帮助到了你 欢迎采纳 祝学习愉快~

0
h小怪
h 老师,对象的key-value都是存放在堆中的嘛?我越想越奇怪,循环遍历将obj的 key赋值给newObj,js对象的key -value 到底放在哪里啊。。。
h019-08-06
共3条回复

_小怪

提问者

2019-08-04

这个var newObject = {} 是指在堆内存开辟一个新空间吗?

视频里面一开始将的引用类型赋值 var newObject = obj, obj是一个 存放着对象地址的变量,这个操作是将obj里面存放的地址也赋值到 newObject中这个对象,使得newObject也指向同一个对象。然后老师写的循环浅拷贝newObj不是一个新的对象地址吗?为什么newObj和obj还是指向同一个地址,而且老师讲说虽说指向同一个地址但是又不相同,有点晕了老师

0

0 学习 · 4826 问题

查看课程