1、遇到问题经过:写个游戏,遇到一个对象新建的问题,我知道怎么解决,但是不明白为什么。代码简化之后如下形式:
2、代码示例:
var o = {
a:'42',
b:o.a
};
console.log(o.b)
3、报错信息:提示typeerror,也即打印o.b的时候,查找b:o.a时,o.a的o不存在,所以我想是不是o对象本身在o内部不可见呢?
4、我的解决办法:
var o = {
a:'42',
b:function(){
return o.a
}
};
console.log(o.b());//打印出'42'
5、疑惑:在对象内部引用自身不是很正常的思维吗?比如:
var Bricks = {
col: 5,
row: 5,
width: $winWidth/Bricks.col
}
这种的。
望赐教。
var o = {
a:'42',
b:o.a
};
首先会创建一个匿名的对象,此时变量o还没被初始化,故o.a表达式就会执行报错~~
真正发生错误的地方是定义o
的时候,而不是打印的时候。
var o = {
a:'42',
b:o.a
};
这句的执行过程是这样的(只是用JS代码模拟,并不是完全的真实过程):
var o;
var temp = {
a:'42',
b:o.a
};
o = temp;
delete temp;
可以看到,对象是先创建然后再赋值给o
这个变量的,跟你理解的边创建边赋值
是不一样的。
要解决这个问题,除了你的那种做法,还可以这样:
var o = {
a : '42'
};
o.b = o.a;
function O(a){
this.a=a;
this.b=this.a;
}
var o = new O('42');
alert(o.b);
学js不深,难的不会,只想到这样的解决方法。。