-1

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

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

我想做的是:

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

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

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

谢谢!


编辑:

这是我得到的错误:

TypeError:常量未定义

4

2 回答 2

0

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

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

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

不,命名空间在 JavaScript 中不是一个东西。那是一个对象。而已。

于 2012-12-24T00:16:31.660 回答
0

问题是Constants在赋值执行之前不存在,也就是在构造对象之后。你可以做这样的事情(一个IIFE):

var Constants = (function() {
    self = { Foo : 'bar' };
    self.SomeVar = self.Foo + 'value';
    return self;
}());
于 2012-12-24T00:21:29.177 回答