“嵌套”是否有命名约定;常数;JavaScript值?
我们应该如何将Java或其他类似C的常量大小写约定传递给JavaScript 在Java中,我们会用全大写字母命名一个“常量”(静态final)成员。如果我们有一组我们想要作为常量的值,我们可以使用一个enum成员,并且,但是单独的enum将是大写的,例如“嵌套”是否有命名约定;常数;JavaScript值?,javascript,naming-conventions,Javascript,Naming Conventions,我们应该如何将Java或其他类似C的常量大小写约定传递给JavaScript 在Java中,我们会用全大写字母命名一个“常量”(静态final)成员。如果我们有一组我们想要作为常量的值,我们可以使用一个enum成员,并且,但是单独的enum将是大写的,例如SomeClass.SomeEnum.someu值 让我们假设我有一个用于某个星际迷航游戏的JavaScript库(举一个愚蠢的例子),其中有一个根命名空间对象StarTrek。我有一些常量值(不要介意Js没有常量),我想为外星物种、行星属性构
SomeClass.SomeEnum.someu值
让我们假设我有一个用于某个星际迷航游戏的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"
}
};
StarTrek.Species = {
HUMAN: "HUMAN",
KLINGON: "KLINGON",
VULCAN: "VULCAN"
};
StarTrek.PlanetAttribute = {
Class: {
M: "M",
T: "T",
...
},
LifeForms: {
NONE: "NONE",
INTELLIGENT: "INTELLIGENT",
UNINTELLIGENT: "UNINTELLIGENT"
}
};
请注意,与Java不同,我们在PLANET\u属性中有一些类似于嵌套的“enum”。我在这里选择了大写的“enum”名称,因为它感觉像是StarTrek下面的所有内容。
本质上应该是“常量”(而在Java中,enum实际上是一个类,因此是BumpyCase名称)。所以无论如何,我可以通过使用StarTrek.PLANET\u ATTRIBUTE.LIFE\u FORMS.no\u intelligent
来指定没有智能生命形式的地方
现在,按照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"
}
};
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?为什么?对此有什么约定吗?答案是:这真的不重要!
第二个约定看起来更好(第一个对你大喊大叫),也在C#中使用,但这取决于你!我认为这方面没有限制
但是关于javascript中的枚举值:也许这样更好?您可以将枚举用作标志
StarTrek.Species = {
HUMAN: 1,
KLINGON: 2,
VULCAN: 4
}
编辑:
如前所述,javascript中没有常量的概念,因此这取决于您的选择。第二个看起来不那么烦人。除此之外。请记住,在JavaScript中确实没有常量的概念。在这个场景中,物种只是一个对象,它的值可以更改。我发现key=value模式有时在这里工作得更好,使验证更容易。例如,用户将StarTrek.Species.HUMAN传递给我的函数,但我只得到一个字符串;我可以通过看星际旅行中是否存在来检查function setSpecies(species){if(!StarTrek.species[species]){throw new Error('Unknown species');};this.species=species;}
我承认在我的问题“别介意Js没有常量”中缺少Js实际常量。然而,虽然不能强制执行,但它仍然是一个好的概念和命名约定。@jlarson是的。我刚才提到了c-sharpy枚举。