Re: [問題] 為什麼無法在同一個物件裡讀取另一個屬性的值
※ 引述《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
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Web_Design 近期熱門文章
PTT數位生活區 即時熱門文章