xde*_*000 11 javascript constants
我正在设计一些类,对于某些数据,我想使用不变的字段.
现在,AS USUAL,IE不支持密钥const
const T = 10;
Run Code Online (Sandbox Code Playgroud)
不行.
我可以通过创建一个属性__defineGetter__,并__defineSetter__以默说,但是,像往常一样,IE不支持这种语法(IE 8的Object.defineProperty,但是,自定义对象无法正常工作).
任何的想法?
Pre*_*aul 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
Run Code Online (Sandbox Code Playgroud)
如果开发人员可以在javascript中读取值,那么该开发人员可以修改该值.
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
Run Code Online (Sandbox Code Playgroud)
Object.defineProperty就是你想要的.
例如:
var obj = {};
Object.defineProperty(obj, 'key', {
enumerable: false,
configurable: false,
writable: false,
value: 'static'
});
Run Code Online (Sandbox Code Playgroud)
Wil定义"obj.key"值:"static",它将是readonly.
本质上,通过将它们全部置为假,您将在对象上创建常量.顺便说一句,他们的默认值是假的.
所以有效地这样做:
Object.defineProperty(obj, 'property', { value: 'value'});
Run Code Online (Sandbox Code Playgroud)
将使用值'value'在名为'property'的'obj'上创建一个常量.或者你可以这样做
function setConstant(obj, key, value)
{
Object.defineProperty(obj, key, {value: value });
}
var obj = {};
setConstant(obj, "constantName", "constantValue");
Run Code Online (Sandbox Code Playgroud)
会让它变得非常易读.