为了账号安全,请及时绑定邮箱和手机立即绑定

在线等,挺急的!js可以通过解构后得到的属性获取这个被解构的对象吗?各位有什么建议?

在线等,挺急的!js可以通过解构后得到的属性获取这个被解构的对象吗?各位有什么建议?

白衣染霜花 2019-08-24 22:50:16
js可以通过解构后得到的属性获取这个被解构的对象吗?//创建一个对象objletobj={a:"Bob",b:newDate().toLocaleTimeString(),c:function(){console.log(this.a)}}//结构得到它的属性alet{a}=obj//那么有没有什么方法可以把这个完整的obj对象,通过解构后的a,表示出来呢?//下面是我的一些愚蠢的尝试console.log(a.__proto__)//[String:'']console.log(a.constructor)//[Function:String]console.log(a.__proto__.constructor)//[Function:String]还有我发现解构赋值之后,你再对原对象的值进行修改不会影响解构得到的值let{a}=objobj.a="Jack"//修改原对象的值console.log(a)//Bob所以说解构赋值其实是重新创建了一个变量a,然后在解构的同时把值复制过来了吗?如果是这样,那确实无法从a来重新获得obj了。对了,js本身(或者说所有编程语言)就是无法用一个对象的某个属性,重新又逆向得到这个对象的吧?求大牛解答一下
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

从a获得obj是肯定不行的
通过修改obj.a影响a是可以做到的。首先你要明白引用赋值和传值赋值,
修改代码
letobj={
a:[1,2,3],
b:{xx:1}
}
let{a,b}=obj
a.push(4)
b.xx=2;
console.log(obj.a)//[1,2,3,4]
console.log(obj.b)//{xx:2}
你如果企图直接b=1来改obj.b的值,那是不可能的,因为之前b和obj.b只是指向同一个内存地址,当b=1后,b指向的位置改变了,但是obj.b的位置没变.而采用我上面代码的方式,就是改变那个地址的值,所以他们都会同时改变.
                            
查看完整回答
反对 回复 2019-08-24
?
Helenr

TA贡献1780条经验 获得超4个赞

解构,不就是定义变量吗。例如vara=obj.a,当你改变obj.a时(此处a是普通数据,非引用数据),a肯定不会被改动的。
而且a没有任何属性指向原对象obj,你多看下js的数据结构就了解了
                            
查看完整回答
反对 回复 2019-08-24
  • 2 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信