查看: 6492|回复: 12

[有事请教] 请教一个关于JS的基础问题,汗颜中………………

[复制链接]
梦石
0
星屑
2381
在线时间
169 小时
注册时间
2017-4-25
回帖
185
发表于 2021-6-8 11:31:39 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
例子:
var obj  = {x1:456,x2:789};
var xob = obj;
xob.x1 = 123;
console.log(obj.x1); //123

意思就是xob并不是独立的,其中的变量变化时,obj中也会相应变化。有没办法使两者相对独立,不关联?
梦石
14
星屑
7894
在线时间
1447 小时
注册时间
2020-4-19
回帖
261

MZ评测员极短25参与极短22获奖极短21参与

发表于 2021-6-8 12:51:12 | 显示全部楼层
给新对象直接赋值旧对象相当于浅拷贝,这样两者还是有关联的。
你想要实现的应该是对象的深拷贝,
比如
var obj = {a:1,b:2}  
var newObj = JSON.parse(JSON.stringify(obj));
newObj.a=3;   
console.log(obj);  
console.log(newObj);  

这是其中一种方法,你可以按js 对象 深拷贝 这样的关键词来查一查
回复 1 0

使用道具 举报

梦石
0
星屑
2381
在线时间
169 小时
注册时间
2017-4-25
回帖
185
 楼主| 发表于 2021-6-8 14:26:26 | 显示全部楼层
yuyering 发表于 2021-6-8 12:51
给新对象直接赋值旧对象相当于浅拷贝,这样两者还是有关联的。
你想要实现的应该是对象的深拷贝,
比如

OK!谢谢!
回复

使用道具 举报

老黄鸡

梦石
4
星屑
45709
在线时间
7951 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2021-6-8 18:02:55 | 显示全部楼层
实际上直接赋值浅拷贝也算不上,多数情况下浅拷贝也已经够用
你可以试试,不过最好还是理解几种情况的区别再具体应用
var newObj = obj.slice(0);
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 1 0

使用道具 举报

梦石
0
星屑
2381
在线时间
169 小时
注册时间
2017-4-25
回帖
185
 楼主| 发表于 2021-6-8 18:45:20 | 显示全部楼层
本帖最后由 rexuegg123 于 2021-6-8 18:49 编辑
fux2 发表于 2021-6-8 18:02
实际上直接赋值浅拷贝也算不上,多数情况下浅拷贝也已经够用
你可以试试,不过最好还是理解几种情况的区别 ...


已经在网上看过了,有好几种方法,各有优缺点,比较稳妥的还是自己写一个判断类型并遍历深层拷贝的

slice()只能用于数组吧?
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2021-6-8 23:28:11 | 显示全部楼层
深拷贝,无脑 JSON.parse+JSON.stringify,注意处理那些json序列化会丢的东西

浅拷贝面向新浏览器我都直接 obj = { ...obj } arr = [ ...arr ]
回复

使用道具 举报

梦石
0
星屑
2276
在线时间
576 小时
注册时间
2018-9-13
回帖
34
发表于 2021-6-9 00:12:43 | 显示全部楼层
印象中MV自带深拷贝函数:JsonEx.makeDeepCopy(对象)
回复

使用道具 举报

梦石
0
星屑
2585
在线时间
297 小时
注册时间
2021-5-4
回帖
97
发表于 2021-6-9 04:54:19 | 显示全部楼层
本帖最后由 MH-Pride 于 2021-6-9 04:58 编辑

他们都是指向同一个值 所以值变 他们得到的值也会变  这是我的理解如果没有记错的话
回复

使用道具 举报

梦石
0
星屑
14322
在线时间
2611 小时
注册时间
2013-6-10
回帖
1692
发表于 2021-6-9 07:43:16 | 显示全部楼层
那可不可以这样呢?
xob=obj
xab=obj
xob.a=111
console.log(xab);  
xab是不是原来的obj?

点评

这个不行吧,指针指向的都是obj对象存储  发表于 2021-12-25 15:16
回复

使用道具 举报

梦石
2
星屑
5065
在线时间
706 小时
注册时间
2018-12-11
回帖
213

MZ评测员

发表于 2021-6-9 09:07:16 | 显示全部楼层
看到楼上很多都说用json序列化+反序列化做深拷贝,我就想起了最近遇到的一个问题,某些Game_XXX里引用的同一个对象在存档后变成两个对象了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部