我创建了一个如下所示的名称空间。
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:常量未定义
答案 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;
}());