Javascript - 如何使用新约定声明命名空间对象

时间:2016-12-23 14:31:54

标签: javascript ecmascript-6 conventions

我是最新编程惯例和编程语言最新成员的忠实粉丝。最近我在Google Guidelines读到我们应该使用constlet代替var

现在在我的项目中,我有命名空间对象变量(如果这是他们所谓的,请纠正我,如果我错了)就像这样

var myObj = {

    func1: {},
    func2: {}
};

var myOtherObj = {

    var1: 'foo',
    var2: 'bar'
};

我应该如何使用constlet的新约定命名这些对象?我很困惑,因为我不知道这些大物体是否会随着时间的推移而改变......

3 个答案:

答案 0 :(得分:3)

const不会阻止对象发生变化(否则它们不会freeze。它可以防止变量的值发生变化。

例如,您仍然可以

const myObj = {

    func1: {},
    func2: {}
};

然后

myObj.fun3 = function(){...

使用const声明的变量不能做什么(但似乎不是你的意愿)是

myObj = {};

模块通常用const声明。

答案 1 :(得分:1)

我尝试遵循的一般规则是:const无处不在,let当您无法使用constvar时。

对于您的示例,当您定义对象(或其他情况下数组等)时,我倾向于定义具有let的对象,以明确指示变量引用可能会更改< em>或里面的内容。

const不会阻止更改列表中对象或元素的属性,因此如果您不确定是否会发生这种情况,我认为最好使用let。它更清晰,可以防止混乱。

答案 2 :(得分:1)

如果你真的想要一个不能改变值的符号来引用一个也是不可变的对象,你可以这样做:

const CONSTANT = Object.freeze({
  a: "hello",
  b: "world"
});

另外请注意,旧平台仍然不支持constlet(并且可能Object.freeze()支持此事。)