我正在设计一些类,对于某些数据,我想使用不变的字段。
现在, AS USUAL ,IE不支持密钥const
const T = 10;
不行。
我可以通过__defineGetter__
和__defineSetter__
创建一个属性,然后进行模仿
, AS USUAL ,IE不支持该语法(IE 8具有Object.defineProperty
但不支持自定义对象。)
有什么想法吗?
答案 0 :(得分:11)
“没有解决方案”是最安全的解决方案。现在没有一个很好的机制来在Javascript中创建常量,但如果你建立一个约定(ALL CAPS FOR CONSTS)来帮助识别它们并且不自己覆盖它们那么你自己的常量将是安全的。
如果您正在编写公共库并且您真的担心某人修改某个值,那么您可以使用只能通过自己的代码访问的私有变量,方法是使用函数控制范围:
(function() {
var MY_CONSTANT = 42;
alert(MY_CONSTANT); // alerts "42"
...do other stuff in here...
})();
alert(MY_CONSTANT); // alerts "undefined" because MY_CONSTANT is out of scope here
如果开发人员可以在javascript中读取值,则该开发人员可以修改该值。
答案 1 :(得分:6)
Javascript中有一个freeze()方法,可用于创建实际常量。
用法:
var consts = {}; // Object to store all constants
consts.MY_CONSTANT= 6;
Object.freeze(consts); // Make the consts truly read only
consts.MY_CONSTANT= 7; // Trying to do this will give error
答案 2 :(得分:6)
Object.defineProperty就是你想要的。
例如:
var obj = {};
Object.defineProperty(obj, 'key', {
enumerable: false,
configurable: false,
writable: false,
value: 'static'
});
Wil使用值定义“obj.key”:“static”,它将是readonly。
本质上,通过将它们全部设为false,您将在对象上创建常量。顺便说一句,他们的默认值是假的。
如此有效地做到这一点:
Object.defineProperty(obj, 'property', { value: 'value'});
将在名为'property'的'obj'上创建一个值为'value'的常量。或者你可以这样做
function setConstant(obj, key, value)
{
Object.defineProperty(obj, key, {value: value });
}
var obj = {};
setConstant(obj, "constantName", "constantValue");
会让它变得非常易读。
答案 3 :(得分:2)
请注意,将某些内容定义为常量确实只能确保它不会被覆盖。
如果你真的不能将某个东西定义为常量,那么只需将其定义为变量并将其值设置一次即可。我假设您正在编写代码,因此您可以确保不会覆盖它...
显然不太理想,但它应该有用。
答案 4 :(得分:1)
旧问题,但现在你可以简单地使用:
const MY_CONST = 10;
来自MDN:
const声明创建对值的只读引用。它并不意味着它拥有的值是不可变的,只是无法重新分配变量标识符。
Supported by已经是所有主流浏览器。