模块Javascript中的常量或最终变量
Constants or Final Variables in Modules Javascript
我正在尝试编写一些代码,这些代码允许我根据使用的变量名检索整数值。然而,我试图使整数值成为一个最终值或一些无法更改的值。我在下面放置了一些代码,这些代码允许我检索如上所述的值。有人能告诉我,我怎么可能把它们作为最终变量或其他什么吗?提前谢谢。
(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
免责声明:在安全常数/最终变量方面很愚蠢。在提高性能方面,因为js引擎可以对其进行更多的优化,我怀疑它是否会有所不同。
基准测试显示性能没有明显的增长。除了迂腐或伪安全之外,这实际上并没有什么用处。
唯一的用例是冻结部分库,这样用户就不会朝自己的脚开枪。
带ES5 Object.freeze
window.MyModule = Object.freeze({
RED: "#FF0000",
BLUE: "#0000FF",
GREEN: "#00FF00",
});
您可以(强烈建议使用ES5填充程序升级旧版/旧版浏览器以实现合规性。
您也可以只使用Object.defineProperties
window.MyModule = {};
Object.defineProperties(window.MyModule, {
RED: { value: "#FF0000" },
BLUE: { value: "#0000FF" },
GREEN: { value: "#00FF00" }
});
使用Object.create
有一个很好的快捷方式
window.MyModule = Object.create(null, {
RED: { value: "#FF0000" },
BLUE: { value: "#0000FF" },
GREEN: { value: "#00FF00" }
});
小心将原型设置为null
,您可能希望将其设置为Object.prototype
我知道的最好/唯一的方法是将RED、BLUE、GREEN等声明为函数并返回一个常数值,如下所示:
window.MyModule = {
RED: function() { return "#FF0000"; },
BLUE: function() { return "#0000FF"; },
GREEN: function() { return "#00FF00"; }
};
有些人仍然可以覆盖函数来做一些不同的事情,但在语义上更难做到——一个函数似乎更像是不应该被覆盖。
您可以创建只读属性(即具有getter
但没有setter
的属性)。
如果使用ECMAScript5,请检查Object.defineProperty()
。
一些早期版本支持object.__defineGetter__()
。
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将常量或变量的值定义为不带赋值的常量或变量名称
- 在 jQuery 中使用常量声明变量
- Python:使用嵌入式 Javascript 常量/变量解析 JSON 字符串
- 是否可以操作两个变量等同于 JavaScript 中的一个常量
- 删除或覆盖 JavaScript Harmony / ECMAScript 6 中的常量变量
- 如何让常量变量在JavaScript代码中动态工作
- 你怎么称呼一个变量,它在函数外是常量,但在函数内是变量
- CoffeeScript 类中的实例变量和常量
- 为什么我不应该在JavaScript中为常量使用全局变量呢?
- Ionic 2如何使用常量变量's在index.html中声明
- 在rails模型和angularjs控制器之间共享一个常量变量
- “未定义的常量/变量”错误使用带有 Angular JS的 Laravel...无法在边栏选项卡中显示变量
- 模块Javascript中的常量或最终变量
- Javascript中的常量变量
- 将javascript变量导入为常量angular
- 创建用于移动位置的常量而不是变量
- 在 Angular 中将环境变量设置为常量