如何定义一个类只包含所有常量变量?

时间:2013-09-04 15:36:45

标签: dojo

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

2 个答案:

答案 0 :(得分:2)

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

  1. 实际上有人偶然更改了常量并搞砸了很多东西
  2. 有人试图访问不存在的常量并且没有出现明显的错误
  3. 所以常量模块看起来像:

    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,可能有一种方法可以颠覆这一点,但希望它可以抵御常见错误。

答案 1 :(得分:1)

我会模仿dojo/keys

所做的事情

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