我是一个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;
}
});
还是更好的方法?
答案 0 :(得分:1)
如果要创建命名空间常量而不处理getter的冗长性,同时仍然获得相似的结果,则可以尝试使用Object.freeze。例如
library(mapdeck)
set_token("MAPBOX_TOKEN") ## you'll need an API token
df <- read.csv(paste0(
'https://raw.githubusercontent.com/uber-common/deck.gl-data/master/',
'examples/3d-heatmap/heatmap-data.csv'
))
mapdeck(
style = mapdeck_style('dark')
, pitch = 45
) %>%
add_grid(
data = df[1:30000, ]
, lat = "lat"
, lon = "lng"
, cell_size = 1000
, elevation_scale = 50
, layer_id = "grid_layer"
)
答案 1 :(得分:0)
您可以对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);