访问数据成员

时间:2012-12-24 00:15:23

标签: javascript

我创建了一个如下所示的名称空间。

var Constants = {
    Foo: 'bar',
    SomeVar: {
       key: 'value'
    }
};

我想做的是:

var Constants = {
    Foo: 'bar',
    SomeVar: {
       key: Constants.Foo + 'value' // Notice the Constants.Foo
    }
};

我想要做的是能够使用 Constants.Foo 的值来为 SomeVar 创建一个值。但是这会在Firebug中引发错误。

所以我想知道,如何在Constants命名空间中访问Foo的值;而且,我一直在阅读一些关于Javascript封装的文章(如this一个),是否可以访问Foo的值而无需执行Constants.Foo?也许某种方式来保留对命名空间的 this 关键字的引用,然后我可以执行类似 thisParent.Foo 的操作。

谢谢!


编辑:

这是我顺便说一句的错误:

  

TypeError:常量未定义

2 个答案:

答案 0 :(得分:0)

那是不可能的。对象 literal 在您将其分配给某个东西之前没有名称,到那时为时已晚。对象文字也不是函数,因此没有可以使用的上下文关键字; this仍然是包含函数中的任何内容。之后添加属性是唯一的方法。

var Constants = {
    Foo: 'bar',
    SomeVar: {}
};

Constants.SomeVar.key = Constants.Foo + 'value';

不,命名空间不是JavaScript中的东西。那是一个对象。没什么。

答案 1 :(得分:0)

问题是Constants在执行赋值之前不存在,即在构造对象之后。你可以这样做(IIFE):

var Constants = (function() {
    self = { Foo : 'bar' };
    self.SomeVar = self.Foo + 'value';
    return self;
}());