亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

萌新!js可以通過解構后得到的屬性獲取這個被解構的對象嗎?各位有什么建議?

萌新!js可以通過解構后得到的屬性獲取這個被解構的對象嗎?各位有什么建議?

開滿天機 2019-08-14 19:50:21
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"http://修改原對象的值console.log(a)//Bob所以說解構賦值其實是重新創建了一個變量a,然后在解構的同時把值復制過來了嗎?如果是這樣,那確實無法從a來重新獲得obj了。對了,js本身(或者說所有編程語言)就是無法用一個對象的某個屬性,重新又逆向得到這個對象的吧?求大牛解答一下
查看完整描述

2 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

從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-14
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

解構,不就是定義變量嗎。例如vara=obj.a,當你改變obj.a時(此處a是普通數據,非引用數據),a肯定不會被改動的。
而且a沒有任何屬性指向原對象obj,你多看下js的數據結構就了解了
                            
查看完整回答
反對 回復 2019-08-14
  • 2 回答
  • 0 關注
  • 650 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號