【问题标题】:Putting my variables under a namespace将我的变量放在命名空间下
【发布时间】:2011-09-30 06:26:44
【问题描述】:

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

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

var obj = {
    a : a
    b : b
}

还有比这更短的方法吗?

编辑:

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

var obj = objectify(a, b);

我想知道 javascript 库中是否已经内置了类似的东西。

【问题讨论】:

  • 只有将它们直接声明为对象的属性。
  • 肯定是通过做你所做的事情来否定名称间距这一点?

标签: javascript variables object namespaces encapsulation


【解决方案1】:

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

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

注意属性之间的逗号,这是必需的,以及对象声明后的分号,这是推荐的。

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

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

【讨论】:

    【解决方案2】:
    var obj = {
      a: "variable",
      b: "variable"
    };
    

    我可能在这里误解了您的要求

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        var a = "variable";
        var b = "variable";
        var obj = {};
        obj[a] = a;
        obj[b] = b;
        

        抱歉布局,所见即所得编辑器没有任何选项卡(

        【讨论】:

        • @Felix Kling,感谢您的编辑。但是为什么编辑器没有任何按钮和预览呢?
        【解决方案5】:

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

        特别是,如果您有:

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

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

        但是c内容 的更改会影响NS.c(反之亦然),因为c 是一个对象的引用。 p>

        但是,您随后更改存储在 NS.c 中的引用的任何操作都会破坏该链接。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-05
          • 1970-01-01
          • 2011-05-16
          • 2010-10-17
          • 2018-02-03
          • 2012-07-19
          相关资源
          最近更新 更多