声明JavaScript常量的最佳方法

时间:2018-08-25 01:40:12

标签: javascript

我是一个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;
  }
});

还是更好的方法?

2 个答案:

答案 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);