1

我如何定义一个只包含所有常量变量的类?这么晚了,我只能将我的常量从任何其他类(如 Constants.Car)中引用为在 Constatns 类中定义的值(“Blue Car”)。让我们说: Car = Constants 类中的“Blue Car”。

4

2 回答 2

2

我一直在使用一个稍微过度设计的解决方案,因为我有点偏执:

  1. 有人实际上意外地改变了常量并搞砸了很多东西
  2. 有人试图访问一个不存在的常量但没有得到明显的错误

所以常量模块看起来像:

define(["dojo/_base/lang"], function(lang){

    // Variable is private, never directly exposed to outside world
    var constants  = {
        FOO : "alpha",
        BAR : "beta"
    };

    // If the name of a constant is given, return the associated variable.
    // If not, return all constants, but return a COPY so that potential
    // damage is limited.
    return function(cname){
        if(typeof cname == "undefined"){
            // Copy of our protected object
            return lang.clone(constants);
        }else{
            // Value of a particular thing            
            if(constants.hasOwnProperty(cname)){
                return constants[cname];
            }else{
                throw "Constant '"+cname+"' does not exist.";
            }
        }
    };

});

要使用这些常量,我会:

require(["package/my/constants"],function(myconstants){
    var x = myconstants("FOO"); // Should be "alpha"
    var y = myconstants(); // Should be {FOO:"alpha",BAR:"beta"}
}

鉴于它是 Javascript,可能有一种方法可以颠覆这一点,但希望它能够抵抗常见错误。

于 2013-09-04T22:00:26.550 回答
1

我会模仿所做的事情dojo/keys

http://dojotoolkit.org/reference-guide/1.9/dojo/keys.html

于 2013-09-04T16:03:24.037 回答