我是一名Java开发人员,经过很长时间的工作Java脚本项目。我很惊讶地看到它近年来发生了多大变化,很高兴看到它正在标准化。我有一个基本问题,在当前的项目中,我看到使用原型声明常量(使用 ES5 的项目(,在某些情况下,它使用 getter 来声明常量。那么,声明常量的最佳方法是什么:
使用原型:有些地方它提到这是一种糟糕的方式,因为我们可以覆盖 Ooo.CONSTANT1 值。
function Ooo() {
}
Ooo.prototype.CONSTANT1 = 1;
Ooo.prototype.CONSTANT2 = 2;
旧方式:
const CONSTANT1 = 1;
使用吸气剂:
let _bar = {};
var Foo = function Foo() {}
Object.defineProperty(Foo, "bar", {
get: function() {
return _bar;
}
});
还是更好的方法?
如果你想在不处理getter的详细程度的情况下创建命名空间常量,同时仍然得到类似的结果,你可以尝试使用Object.freeze。
const Directions = Object.freeze({
NORTH: 0,
EAST: 1,
SOUTH: 2,
WEST: 3,
});
您可以尝试所有版本的js
使用以下语法:
consts={};
function DefAsConst(varName, val){
Object.defineProperty(window.consts, varName, {
value: val, writable: false
});
}
DefAsConst("const_1", 4);
console.log(consts.const_1);
consts.const_1=100;
console.log(consts.const_1); //consts.const_1 is 4 still
或者试试这个版本:
consts={};
consts.DefAsConst=function(varName, val){
Object.defineProperty(this, varName, {
value: val, writable: false
});
};
consts.DefAsConst("const_2", 40);
console.log(consts.const_2);
consts.const_2=100;
console.log(consts.const_2);