面向对象javascript如何为常量创建静态类

面向对象javascript如何为常量创建静态类,javascript,Javascript,我决定将所有常量放在一个名为constants的整洁类中,并希望使用点运算符访问其成员 到目前为止,我已经尝试: function Constants(){ Constants.style = {}; Constants.style.border_sides = 20; Constants.style.button_width = 17; // ... } 后来 Constants = new Constants(); 及 这导致了一场灾难 无法访问未定义宽度

我决定将所有常量放在一个名为constants的整洁类中,并希望使用点运算符访问其成员

到目前为止,我已经尝试:

function Constants(){
    Constants.style = {};
    Constants.style.border_sides = 20;
    Constants.style.button_width = 17;
    // ...
}
后来

Constants = new Constants();

这导致了一场灾难

无法访问未定义宽度的按钮

我会使用JSON来声明常量,但我喜欢代码中的注释。
有人能解释一下javascript的OO吗?

在javascript中,每一个对象都是一个对象,因此您要在函数中向常量函数添加属性

要获得想要的效果,请编写:

var Constants = {
  someText: 'text1',
  someInt: 1
};
要访问,只需执行以下操作:

var text = Constants.someText;
如果您想要一个同时包含静态和实例方法的“类”:

function ClassName(){

}

ClassName.prototype = { //Put instance methods here
   instanceMethod1 : function(){},

   instanceMethod2 : function(){}
};

ClassName.staticMethod1 = function(){};
ClassName.staticMethod2 = function(){};

var a = new ClassName();

a.staticMethod1; //undefined
a.instanceMethod1; //function(){};

ClassName.staticMethod1 //function(){};

<>你为什么不考虑使用文字?

var Constants = {
    style: {
        border_sides: 20,
        button_width: 17
    }
}

即使您愿意考虑使用<代码>构造函数< /代码>,用<代码>替换<代码>常数< /> > < <代码> < /p>

function Constants(){
    this.style = {};
    this.style.border_sides = 20;
    this.style.button_width = 17;
    // ...
}
您不需要对文本执行任何
新常量()
(第一个示例)。马上开始使用


例如,第二个示例
(构造函数)
您需要执行
var constants=new constants()

constants
函数替换为
constants
的实例。您将常量应用于函数,而不是常量实例或原型。所以你有效地抹去了常数

我认为应该使用对象文字

var constants = {
   style: {
        border_sides: 20
   }
};

请记住,这两种方法实际上都不是一成不变的。任何人都可以轻松更改“常量”值。如果您想要真正的常量数据,您可能需要使用getter/setter、
Object.defineProperty
或模块模式。

对象文字非常适合我的目的。这就是我添加静态和实例方法的方式,实例和静态变量的工作方式相同吗?嗯。。您可以在这里查看对静态成员的解释:它是java语言(是的,我知道javascript和java是截然不同的语言类型),但这是相同的原则。现在,如果您的环境支持EcmaScript 2015,您可以使用
const
var constants = {
   style: {
        border_sides: 20
   }
};