将我的变量放在命名空间下

时间:2011-07-07 08:25:34

标签: javascript variables object namespaces encapsulation

如何使用相同的变量名创建包含变量的对象,或者换句话说,如何将变量放在命名空间下?

var a = "variable";
var b = "variable";

var obj = {
    a : a
    b : b
}

这样做的方法比这更短吗?

编辑:

让我澄清一下 - 我已经在某处声明了变量a和b。最终,我想将它们全部发送到另一个函数,例如,但我希望所有变量都在一个命名空间下 - obj。因此,我没有使用相同的变量名称和相同的变量值(变量本身)进行繁琐的重新声明每个变量,我想也许有一种简写方式:喜欢

var obj = objectify(a, b);

我想知道javascript库中是否有类似的内容。

5 个答案:

答案 0 :(得分:1)

由于您实际上没有将变量放在对象中,而只是将其内容复制到具有相同名称的属性中,因此您根本不需要创建变量:

var obj = {
  a: "variable",
  b: "variable"
};

请注意所需的属性与对象声明后的分号之间的逗号。建议使用逗号。

您还可以创建一个空对象,然后向其中添加属性(或您喜欢的任何组合):

var obj = {};
obj.a = "variable";
obj.b = "variable";

答案 1 :(得分:0)

var a = "variable";
var b = "variable";
var obj = {};
obj[a] = a;
obj[b] = b;

很抱歉布局,但WYSIWYG编辑器没有任何标签(

答案 2 :(得分:0)

var obj = {
  a: "variable",
  b: "variable"
};

我可能会误解你的要求

答案 3 :(得分:0)

当前版本的javascript中没有名称空间,所以唯一的方法是将这些变量放在一个对象中,这就是你所做的。您也可以创建一个对象并为其分配变量,尽管它不短:

var x = {};
x.foo = "foo";

答案 4 :(得分:0)

您无法将现有变量放入命名空间对象中。

特别是,如果你有:

var a = 1;
var b = "test";
var c = { ... };  // some object

var NS = {
    a: a,
    b: b,
    c: c
};

然后对ab的更改不会影响NS.aNS.b,反之亦然,因为NS对象中的条目是< em>副本原件。

c内容的更改会影响NS.c(反之亦然),因为c参考对象。

然而,您所做的任何事情随后会更改NS.c中存储的引用将破坏该链接。