设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 5073|回复: 12
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2336
在线时间
168 小时
注册时间
2017-4-25
帖子
219
跳转到指定楼层
1
发表于 2021-6-8 11:31:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

意思就是xob并不是独立的,其中的变量变化时,obj中也会相应变化。有没办法使两者相对独立,不关联?

Lv4.逐梦者

梦石
12
星屑
6225
在线时间
1195 小时
注册时间
2020-4-19
帖子
232

极短22获奖极短21参与

2
发表于 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

使用道具 举报

Lv3.寻梦者

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

OK!谢谢!
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39607
在线时间
7482 小时
注册时间
2009-7-6
帖子
13482

开拓者贵宾

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

使用道具 举报

Lv3.寻梦者

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


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

slice()只能用于数组吧?
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
20915
在线时间
9331 小时
注册时间
2012-6-19
帖子
7105

开拓者短篇九导演组冠军

6
发表于 2021-6-8 23:28:11 | 只看该作者
深拷贝,无脑 JSON.parse+JSON.stringify,注意处理那些json序列化会丢的东西

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2276
在线时间
576 小时
注册时间
2018-9-13
帖子
36
7
发表于 2021-6-9 00:12:43 | 只看该作者
印象中MV自带深拷贝函数:JsonEx.makeDeepCopy(对象)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2585
在线时间
297 小时
注册时间
2021-5-4
帖子
101
8
发表于 2021-6-9 04:54:19 | 只看该作者
本帖最后由 MH-Pride 于 2021-6-9 04:58 编辑

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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
10588
在线时间
2009 小时
注册时间
2013-6-10
帖子
1496
9
发表于 2021-6-9 07:43:16 | 只看该作者
那可不可以这样呢?
xob=obj
xab=obj
xob.a=111
console.log(xab);  
xab是不是原来的obj?

点评

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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5060
在线时间
705 小时
注册时间
2018-12-11
帖子
241
10
发表于 2021-6-9 09:07:16 | 只看该作者
看到楼上很多都说用json序列化+反序列化做深拷贝,我就想起了最近遇到的一个问题,某些Game_XXX里引用的同一个对象在存档后变成两个对象了。
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 08:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表