我应该何时初始化javascript属性

when should i initialize javascript properties?

本文关键字:属性 javascript 初始化 何时 我应该      更新时间:2023-09-26

我是javascript的新手,我一直在想一些事情。有没有一种可以接受的方式来列出我的对象属性?

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

的例子:

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

你可以看到,我的游戏对象只是慢慢收集属性,因为我的代码运行。这可以接受吗?或者我应该列出所有我将在游戏对象初始化开始时使用的属性?谢谢。

你可以这样做:

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

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

编辑

请注意,根据本文,当一个对象(至少在V8中,尽管我怀疑其他运行时可能有类似的行为)开始看起来像被用作映射时,那么它的内部就会为此目的进行优化。在此之后,对象上的for ... in循环将不再是优化的候选对象。你可以(我认为)仍然使用Object.keys()来做这样的迭代,总的来说,这可能是一个净收益,但它可能是经历了很多属性创建的对象落入这种情况。

这取决于您的应用程序。如果在创建对象时已经有了想要放入对象中的所有数据,请使用对象文字:

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

然而,在某些情况下,您可能希望在创建时向新创建的对象添加内容。这在使用名称空间时很常见(看起来您正在尝试这样做)。

我会这样开头:

var Game = Game || {};

这样,你可以确保你不会与另一个物体碰撞。然后从那里开始,通过添加属性和方法。一种常见的方法是创建一个闭包,并从该闭包中分配新方法。

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

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