嵌套的“const”JavaScript值是否有命名约定?

时间:2014-01-23 18:21:45

标签: javascript naming-conventions

我们或

在Java中,我们将使用ALL_UPPERCASE命名一个“常量”(静态最终)成员。如果我们有一组我们想要的值作为常量,我们可以使用枚举成员和we'd name the enum member with a HumpBack name,但是单独的枚举将是大写的,例如SomeClass.SomeEnum.SOME_VALUE

让我们说我有一个用于一些星际迷航游戏的JavaScript库(选择一个愚蠢的例子),带有一个根命名空间对象StarTrek。我有一些常数值(更不用说Js没有常数)我想为外星物种,行星的属性建立。在不考虑Java约定的情况下,我会选择以下内容:

StarTrek.SPECIES = {
    HUMAN: "HUMAN",
    KLINGON: "KLINGON",
    VULCAN: "VULCAN"
};

StarTrek.PLANET_ATTRIBUTE = {
    CLASS: {
        M: "M",
        T: "T",
        ...
    },
    LIFE_FORMS: {
        NONE: "NONE",
        INTELLIGENT: "INTELLIGENT",
        NO_INTELLIGENT: "NO_INTELLIGENT"
    }
};

请注意,与Java不同,我们在PLANET_ATTRIBUTES中有类似嵌套“枚举”的内容。我在这里找到了大写的“枚举”名称,因为它感觉下面StarTrek.以下的所有内容基本上都应该是“常量”(在Java中,枚举实际上是一个类,因此是BumpyCase名称)。所以无论如何我可以通过使用StarTrek.PLANET_ATTRIBUTE.LIFE_FORMS.NO_INTELLIGENT指定没有智能生命形式的地方。

现在,按照Java的惯例,我会选择以下内容:

StarTrek.Species = {
    HUMAN: "HUMAN",
    KLINGON: "KLINGON",
    VULCAN: "VULCAN"
};

StarTrek.PlanetAttribute = {
    Class: {
        M: "M",
        T: "T",
        ...
    },
    LifeForms: {
        NONE: "NONE",
        INTELLIGENT: "INTELLIGENT",
        UNINTELLIGENT: "UNINTELLIGENT"
    }
};

在这种情况下,我会使用StarTrek.PlanetAttribute.LifeForms.NO_INTELLIGENT指定那里没有智能生命形式。

哪种适合JavaScript更好?为什么?是否有为此提出的任何公约?

1 个答案:

答案 0 :(得分:0)

答案是:它真的没关系(根本)!

第二个约定看起来更好(第一个对你大喊大叫)并且也在C#中使用,但这取决于你!我认为对此没有任何限制。

但关于javascript中的枚举值:也许这会更好?您可以将枚举用作标记。

StarTrek.Species = {
    HUMAN: 1,
    KLINGON: 2,
    VULCAN: 4
}

修改

正如Jason所说,在javascript中没有任何常量的概念,所以这取决于你的选择。