作者banana2014 (香蕉共和国)
看板Web_Design
标题Re: [问题] 为什麽无法在同一个物件里读取另一个属性的值
时间Fri Jul 21 04:48:48 2017
※ 引述《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://webptt.com/cn.aspx?n=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://webptt.com/cn.aspx?n=bbs/Web_Design/M.1500583731.A.35C.html
1F:推 nottt: 解说好详细,推一下 07/21 07:06
2F:推 akccakcctw: 推推,我忘记按f5了,难怪可以XDDD 07/21 12:40
3F:推 EPGo: 07/21 13:21
4F:推 ilovekebi: 推解说详细~ 07/21 13:56
5F:推 bug9: 推!! 07/23 10:31