Re: [問題] 為什麼無法在同一個物件裡讀取另一個屬性的值

看板Web_Design作者 (香蕉共和國)時間8年前 (2017/07/21 04:48), 編輯推噓5(500)
留言5則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《freeman371 (自由人371)》之銘言: : 標題: [問題] 為什麼無法在同一個物件裡讀取另一個屬性的值 : 時間: Thu Jul 20 08:01:54 2017 : : 程式碼如下: : : var f = { : d: 123, : e: this.d : }; : : 要如何在屬性e底下讀取同一個物件的屬性d的值呢? : : 亦即讓e的值也變得跟d一樣是123 : : 我用this.d和f.d都無效 為什麼會沒辦法讀取同一物件下的屬性值呢? 原因很簡單,因為物件f在你要賦予e值的時候尚未被定義 也就是在給屬性e值的時候 外面這個f「還在定義中」,當然這時候這個物件f就是undefined啦~ 如果要在屬性e底下讀取同一個物件的屬性d的值,可以用物件方法(Method)來實現 所以改寫之後會變成: var f = { d: 123, e: function(){ return this.d; } }; 到時候只要寫成f.e()就能回傳f.d的值了,也就是數字123 : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.168.21.53 : ※ 文章網址: https://www.ptt.cc/bbs/Web_Design/M.1500508916.A.A74.html : → akccakcctw: 我可以(? http://i.imgur.com/3a6RoGg.png
07/20 19:19 至於a大為什麼可以在屬性e裡讀到f.d的值 我在猜a大可能在Console裡輸入「var f = { d: 123, e: f.d };」這個物件之前 已經有先試試看輸入「var f = { d: 123, e: this.d };」這個物件了 在第一次輸入「var f = { d: 123, e: this.d };」的時候,其實Console已經先把f.d的值輸入到記憶體裡面去了 此時如果再輸入「f.d」這個字眼它跑出來的值就會是先前所設定的f.d的值 也就是「123」 所以這就是為什麼f.d有值的關係 其實a大在第一次輸入「var f = { d: 123, e: this.d };」之後有偷偷把console log清除掉 不然其實之前還有輸入「var f = { d: 123, e: this.d };」這個物件 第一次輸入「var f = { d: 123, e: f.d };」其實是會跑出錯誤的 如下圖: http://i.redwh.al/Wa.png
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.16.48 ※ 文章網址: https://www.ptt.cc/bbs/Web_Design/M.1500583731.A.35C.html

07/21 07:06, , 1F
解說好詳細,推一下
07/21 07:06, 1F

07/21 12:40, , 2F
推推,我忘記按f5了,難怪可以XDDD
07/21 12:40, 2F

07/21 13:21, , 3F
07/21 13:21, 3F

07/21 13:56, , 4F
推解說詳細~
07/21 13:56, 4F

07/23 10:31, , 5F
推!!
07/23 10:31, 5F
文章代碼(AID): #1PSHSpDS (Web_Design)
文章代碼(AID): #1PSHSpDS (Web_Design)