在哪里声明类常量?

Tom*_*ker 21 javascript conventions

我正在使用类成员来保存常量.例如:

function Foo() {
}

Foo.CONSTANT1 = 1;
Foo.CONSTANT2 = 2;
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,除了它看起来有点无组织,所有代码都特定Foo于全局范围内.所以我考虑将常量声明移到Foo()声明中,但是那时代码执行不会Foo被构造吗?

我来自Java,其中所有东西都包含在一个类体中,所以我认为JavaScript可能有类似的东西,或者模仿它的一些解决方法.

use*_*716 31

您在代码中所做的只是将名为CONSTANTvalue 的属性添加1到名为Foo的Function对象中,然后立即使用该值覆盖它2.

我不太熟悉其他语言,但我不相信javascript能够做你似乎尝试的事情.

您添加的Foo任何属性都不会执行.它们只存储在该命名空间中.

也许你想把一些房产原型上Foo

function Foo() {
}

Foo.prototype.CONSTANT1 = 1;
Foo.prototype.CONSTANT2 = 2;
Run Code Online (Sandbox Code Playgroud)

虽然不是你想要的.

  • @hvgotcodes:在`prototype`上,它不会一遍又一遍地初始化.就一次.如果它在`prototype`对象中,则可以将其引用为`this.CONSTANT1`.如果你想通过`Foo.prototype.CONSTANT1`你也可以直接引用它.如果它直接在`Foo`上,那么是的,它将是`Foo.CONSTANT1`. (2认同)

小智 14

你必须像你说的那样制作你的常数:

function Foo() {
}

Foo.CONSTANT1 = 1;
Foo.CONSTANT2 = 2;
Run Code Online (Sandbox Code Playgroud)

你这样访问:

Foo.CONSTANT1;
Run Code Online (Sandbox Code Playgroud)

要么

anInstanceOfFoo.__proto__.constructor.CONSTANT1;
Run Code Online (Sandbox Code Playgroud)

当您创建其他对象时,所有其他解决方案都会分配内存的其他部分,因此它不是常量.你不应该这样做:

Foo.prototype.CONSTANT1 = 1;
Run Code Online (Sandbox Code Playgroud)