猿问

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

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

大话西游666

从a获得obj是肯定不行的通过修改obj.a影响a是可以做到的。首先你要明白引用赋值和传值赋值,修改代码letobj={a:[1,2,3],b:{xx:1}}let{a,b}=obja.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的位置没变.而采用我上面代码的方式,就是改变那个地址的值,所以他们都会同时改变.

慕容森

解构,不就是定义变量吗。例如vara=obj.a,当你改变obj.a时(此处a是普通数据,非引用数据),a肯定不会被改动的。而且a没有任何属性指向原对象obj,你多看下js的数据结构就了解了
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答