我已决定将所有常量放在一个名为常量的简洁类中,并希望使用点运算符访问其成员。
到目前为止,我已经尝试过:
function Constants(){
Constants.style = {};
Constants.style.border_sides = 20;
Constants.style.button_width = 17;
// ...
}
以后
Constants = new Constants();
和
{
$('#button').width(Constants.style.button_width);
}
这导致了
无法访问未定义的button_width。
我会使用JSON声明常量,但我喜欢我的代码中的注释。 有人会解释javascript的OO吗?
答案 0 :(得分:5)
如果你想要一个包含静态和实例方法的“类”:
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(){};
答案 1 :(得分:5)
您将Constants
函数替换为Constants
的实例。并且您将常量应用于函数,而不是常量或原型的实例。所以你有效地擦掉了你的常数。
我认为只使用对象文字
var constants = {
style: {
border_sides: 20
}
};
请记住,这两种方法都没有任何实际意义。任何人都可以轻松更改“常量”值。如果您想要真正的常量数据,可能需要使用getter / setter,Object.defineProperty
或模块模式。
答案 2 :(得分:4)
为什么不考虑使用文字?
var Constants = {
style: {
border_sides: 20,
button_width: 17
}
}
即使您愿意考虑使用construction function
,也请将Constants
替换为this
function Constants(){
this.style = {};
this.style.border_sides = 20;
this.style.button_width = 17;
// ...
}
您不需要为文字做任何new Constants()
(第一个示例)。马上开始使用。
对于第二个示例(constructor function)
,您需要执行var constants = new Constants()
。
答案 3 :(得分:2)
在Javascript中,everyting是一个对象,所以你要在函数中的Constants函数中添加属性。
要获得想要写的效果:
var Constants = {
someText: 'text1',
someInt: 1
};
要访问,只需:
var text = Constants.someText;