视频中老师所讲的浅拷贝不太懂
来源:3-5 变量比较和值的复制
_小怪
2019-08-04 21:39:40
新的对象的每一个属性是原来对象里面一个个的基本类型的拷贝,但是这两个对象不是不同的嘛,不应该是在堆中是两个不同的对象吗?看问答区老师为什么说这两个对象指向的是同一个地址呢?
3回答
好帮手慕码
2019-08-06
同学你好!
(1)你的理解是对的,放在堆里被引用
(2)新对象newobj是存在堆里的,里面的各种内容也是在堆里(放在newobj的实体里,newobj的实体放在堆里,所以新对象里面的数据也在堆里)可以看下这个图:
(3)因为是浅拷贝,所以不会影响另一个
(4)obj的key,value是放在堆里的,指向栈中
现阶段中,同学只要了解基本类型在栈里,引用类型在堆里即可,随着编程经验的积累,也会对这个内存有更加深刻的理解哦
如果帮助到了你 欢迎采纳 祝学习愉快~
好帮手慕码
2019-08-05
同学你好!
是的newObject在堆内存开了一个新空间。浅拷贝:只复制引用,而未复制真正的值。
视频里通过封装的这个copyObj方法:将传入的对象obj遍历,每个属性和值重新赋值给了一个新的对象newObj,这样newObj和原来的obj对象中的内容就一致了,两个对象指向的是同一个地址,但是两个对象是不相等的(只复制一层引用,并没有进行深拷贝:对目标内容的完全拷贝)。
这块比较抽象,一时半会不理解的话建议同学可以等积累一定的编程经验之后再回过头来看下。到时候会比较好理解的多
如果帮助到了你 欢迎采纳 祝学习愉快~
_小怪
提问者
2019-08-04
这个var newObject = {} 是指在堆内存开辟一个新空间吗?
视频里面一开始将的引用类型赋值 var newObject = obj, obj是一个 存放着对象地址的变量,这个操作是将obj里面存放的地址也赋值到 newObject中这个对象,使得newObject也指向同一个对象。然后老师写的循环浅拷贝newObj不是一个新的对象地址吗?为什么newObj和obj还是指向同一个地址,而且老师讲说虽说指向同一个地址但是又不相同,有点晕了老师
相似问题
回答 3
回答 1