var a = {
x : 3,
y : 9,
z : a.y + 1;
}
alert( a.z );
错误提示: cannot read property of "y" of undefined;
为什么?
var a = {
x : 3,
y : 9,
z : a.y + 1;
}
alert( a.z );
错误提示: cannot read property of "y" of undefined;
为什么?
var a={}; 这种方式是对象常量,对象的属性会立即计算执行,在堆中开辟一个内存存放,然后a这个变量指向这个内存。这就是你在a属性中引用别的属性报错的原因,因为a这时还是undefined。有人建议使用在a属性中使用this,是希望this指向的是a,但实际不是,应该是window或global。
解决方式 分开计算 a.c=a.b+4
改为函数 a.c= function(){return this.b+4}
10 回答11k 阅读
6 回答2.9k 阅读
5 回答4.7k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
表达式赋值先计算赋值操作符右边的值,然后把右边的计算结果赋值给左边的变量
左边的变量在没有被赋值前,其值为undefined
所以在
{}
对象字面量表达式执行完之前,a的值一直为undefined故JS解释器会提示如上的错误信息给你
那么修改为
代码运行没有错误,那么a.z是期望的10么?
很不幸,给出的值是
NaN
,原因在于此处的this代表的是全局对象,而不是期望的变量a指向的对象,全局对象下没有y这个属性,this.y值为undefiend,和1执行加操作后,其值就为NaN
想要在字面量表达式中使用当前构建的对象的属性值是不能达成的
不过可以试试这样的~