Module Javascript模块中的常量或最终变量

Module Javascript模块中的常量或最终变量,module,constants,javascript,final,Module,Constants,Javascript,Final,我正在尝试编写一些代码,这些代码允许我根据使用的变量名检索整数值。但是,我试图使整数值成为最终值或无法更改的值。我在下面放置了一些代码,允许我按照上面的解释检索值。有谁能告诉我,我怎么可能把它们变成最后的变量或什么的?提前谢谢 (function() { // Create the global, and also give ourselves a convenient alias for it (`mod`) window.MyModule = { RED: "#FF0000",

我正在尝试编写一些代码,这些代码允许我根据使用的变量名检索整数值。但是,我试图使整数值成为最终值或无法更改的值。我在下面放置了一些代码,允许我按照上面的解释检索值。有谁能告诉我,我怎么可能把它们变成最后的变量或什么的?提前谢谢

(function() {

// Create the global, and also give ourselves a convenient alias for it (`mod`)
 window.MyModule = {
    RED: "#FF0000",
    BLUE: "#0000FF",
    GREEN: "#00FF00",
};

})();

alert(MyModule.RED); // #FF0000

我知道的最好/唯一的方法是将红色、蓝色、绿色等声明为函数并返回一个常量值,如下所示:

window.MyModule = {
    RED: function() { return "#FF0000"; },
    BLUE: function() { return "#0000FF"; },
    GREEN: function() { return "#00FF00"; }
};

有些人仍然可以覆盖函数来做一些不同的事情,但这在语义上更难做到-函数似乎更像是不应该被覆盖。

免责声明:就安全常量/最终变量而言是愚蠢的。就提高性能而言,因为js引擎可以对其进行更多优化,我怀疑这会有什么不同

性能没有明显的提高。除了迂腐或伪安全性之外,这实际上并不有用

唯一的用例是将库的一部分冻结,这样用户就不会射中自己的脚

使用ES5

您可以(强烈建议)使用升级旧版/旧版浏览器以实现法规遵从性

你也可以只使用

有一个很好的快捷方式,上面使用


小心将原型设置为
null
,您可能希望将其设置为
对象。prototype

您可以创建只读属性(即具有
getter
但没有
setter
的属性)

如果使用ECMAScript 5,请签出


一些早期版本支持。

然后我做
window.MyModule.RED=function(){return“#00FF00”}。Final或constant在javscript中还不存在。等待ES5。感谢您的回复,但我尝试修改代码以将值更改为函数,但当我调用警报时,它会返回整个字符串,即在警报框中显示function(){return“#FF0000”;}。为什么会这样?@因为您必须提醒
window.MyModule.RED()
您是调用了该函数还是将该函数传递给了alert?如果选择使用函数,那么应该调用函数,如下所示:alert(MyModule.RED())@我想我漏掉了那个括号。但是我试图得到一些我可以调用的东西,比如MyModule.RED,比如调用一个变量。可以吗?谢谢你的回复。但我想知道是否有一种方法可以让它依赖于旧的javascript版本,而不需要ES5垫片?下面的其余部分是否可用于较旧版本的浏览器?@没有什么是安全的。在所有浏览器中,ES3中不能有常量/最终或只读属性。ES5垫片适用于FF2/3、opera10和safari 4。不是在IE6/7上/8@Raynos为什么常量变量在安全性方面不有用?最好使用ES5垫片,它将为
对象提供检测功能。\uuu defineGetter\uuu
,而不是直接使用它。
window.MyModule = Object.freeze({
    RED: "#FF0000",
    BLUE: "#0000FF",
    GREEN: "#00FF00",
});
window.MyModule = {};
Object.defineProperties(window.MyModule, {
  RED: { value: "#FF0000" },
  BLUE: { value: "#0000FF" },
  GREEN: { value: "#00FF00" }
});
window.MyModule = Object.create(null, {
  RED: { value: "#FF0000" },
  BLUE: { value: "#0000FF" },
  GREEN: { value: "#00FF00" }
});