我什么时候应该初始化javascript属性?

时间:2014-07-07 23:14:32

标签: javascript properties convention

我是javascript的新手,我一直在想些什么。我是否应该接受列出我的对象属性的方式?

具体来说,我一直在编写没有任何初始属性的对象创建代码,并在代码运行时添加它们。

示例:

Game = {};
Game.x = 0;
...Code code code
Game.thing = function ()  {
    Game.variable = 30;
}

正如您所看到的,我的Game对象只是在我的代码运行时慢慢收集属性。这可以接受吗?或者我应该在我的Game对象初始化中列出我将在开头使用的所有属性?感谢。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

var Game = { // DON'T FORGET var !!!!!
  x: 0,
  something: some_value,
  thing: function() {
    this.variable = 30;
  }
};

你在代码中所做的事情并没有错(除了不要忘记var !!)。这是风格和意图的问题。上面的代码(大括号中的部分)被称为“对象文字”,它是一种在飞行中将对象创建为JavaScript值的方法。它非常有用,但它不一定比其他构建对象的方式更好

修改

请注意,根据this article,当一个对象(至少在V8中,虽然我怀疑其他运行时可能有类似的行为)开始看起来像是像地图一样使用时,它内部优化了目的。在此之后,对象上的for ... in循环将不再是优化的候选者。你可以(我认为)仍然使用Object.keys()进行这样的迭代,总的来说它可能是一个净收益,但可能会遇到那些经历大量属性创建的对象陷入这种情况。

答案 1 :(得分:1)

这实际上取决于您的申请。如果在创建对象时包含要放入对象的所有数据,请使用对象文字:

var Game = {
    x: 0,
    thing = function ()  {
        this.variable = 30;
    }
}

但是,在某些情况下,您可能希望随时添加到新创建的对象中。这在命名空间时很常见(您似乎正在尝试这样做)。

我会从这样的事情开始:

var Game = Game || {};

这样,您可以确保不与其他对象发生碰撞。然后通过添加属性和方法从那里开始。一种常见的方法是创建一个闭包并从该闭包中分配新方法。

(function() {
    var foo = function () {
        ... stuff ...
    }
    Game.foo = foo;
})();

这样,您就不会冒不小心创建任何全局变量的风险。 :)