我是javascript的新手,我一直在想些什么。我是否应该接受列出我的对象属性的方式?
具体来说,我一直在编写没有任何初始属性的对象创建代码,并在代码运行时添加它们。
示例:
Game = {};
Game.x = 0;
...Code code code
Game.thing = function () {
Game.variable = 30;
}
正如您所看到的,我的Game对象只是在我的代码运行时慢慢收集属性。这可以接受吗?或者我应该在我的Game对象初始化中列出我将在开头使用的所有属性?感谢。
答案 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;
})();
这样,您就不会冒不小心创建任何全局变量的风险。 :)