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

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

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

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕码 2019-08-06 18:57:14

同学你好!

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

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

http://img1.sycdn.imooc.com//climg/5d49520200012c3705280292.jpg

http://img1.sycdn.imooc.com//climg/5d49520a00015bad01700110.jpg

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

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

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

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

好帮手慕码 2019-08-05 10:30:46

同学你好!

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

http://img1.sycdn.imooc.com//climg/5d47927a0001c42704670446.jpg

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

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

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

  • 提问者 _小怪 #1
    老师,遍历的时候,newObj[p] = obj[p]这个赋值操作是指把obj中对基本数据类型的引用复制一份给了newObj, obj中的这些基本数据值都是存放在堆中被obj所引用的是嘛?还有一点疑问就是一个对象{}里面是各种各样的基本数据类型,都是存储在堆内存中嘛?老师讲的不是基本数据类型存放在栈中嘛
    2019-08-06 16:59:02
  • 提问者 _小怪 #2
    这两个对象都指向同一个地址,那为什么其中一个修改了不会影响到另一个对象
    2019-08-06 17:11:01
  • 提问者 _小怪 #3
    老师,对象的key-value都是存放在堆中的嘛?我越想越奇怪,循环遍历将obj的 key赋值给newObj,js对象的key -value 到底放在哪里啊。。。
    2019-08-06 17:45:03
提问者 _小怪 2019-08-04 21:44:44

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

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

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师