javascript - Plain object对象本身对其内部属性不可见?
阿神
阿神 2017-04-10 17:04:41
[JavaScript讨论组]

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
    }

这种的。

望赐教。

阿神
阿神

闭关修行中......

全部回复(3)
PHP中文网

真正发生错误的地方是定义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不深,难的不会,只想到这样的解决方法。。

迷茫
var o = {
    a:'42',
    b:o.a
 };

首先会创建一个匿名的对象,此时变量o还没被初始化,故o.a表达式就会执行报错~~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号