首页 > Plain object对象本身对其内部属性不可见?

Plain object对象本身对其内部属性不可见?

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不深,难的不会,只想到这样的解决方法。。

【热门文章】
【热门文章】