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

请教各位一个问题,求解答:js可以通过解构后得到的属性获取这个被解构的对象吗?

请教各位一个问题,求解答:js可以通过解构后得到的属性获取这个被解构的对象吗?

拉风的咖菲猫 2019-10-19 09:00:14
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 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

从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-10-19
?
慕容森

TA贡献1853条经验 获得超18个赞

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

添加回答

举报

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