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

sim*_*ed. 3 javascript final module const

我正在尝试编写一些代码,允许我根据我使用的变量名检索整数值.但是,我试图使整数值成为最终值或无法更改的值.我已经放置了一些代码,允许我检索值,如上所述.任何人都可以告诉我,如果我可以将它们作为最终变量或其他东西吗?提前致谢.

(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
Run Code Online (Sandbox Code Playgroud)

Ray*_*nos 6

免责声明:在安全性方面/最终变量方面是愚蠢的.在提高性能方面,因为js引擎可以更好地优化它,我怀疑它有所作为.

基准测试显示性能没有明显增加.除了迂腐或伪安全之外,这实际上并没有用.

唯一的用例是让你的图书馆的一部分被冻结,这样用户就不会在脚下射击.

使用ES5 Object.freeze

window.MyModule = Object.freeze({
    RED: "#FF0000",
    BLUE: "#0000FF",
    GREEN: "#00FF00",
});
Run Code Online (Sandbox Code Playgroud)

您可以(并且强烈建议)使用ES5-shim升级旧版/旧版浏览器以实现合规性.

你也可以使用 Object.defineProperties

window.MyModule = {};
Object.defineProperties(window.MyModule, {
  RED: { value: "#FF0000" },
  BLUE: { value: "#0000FF" },
  GREEN: { value: "#00FF00" }
});
Run Code Online (Sandbox Code Playgroud)

以上使用有一个很好的快捷方式 Object.create

window.MyModule = Object.create(null, {
  RED: { value: "#FF0000" },
  BLUE: { value: "#0000FF" },
  GREEN: { value: "#00FF00" }
});
Run Code Online (Sandbox Code Playgroud)

要小心设置原型null,你可能想要设置它Object.prototype