对象名称动态创建

时间:2017-12-05 19:47:25

标签: javascript javascript-objects

我有一个问题,

我有这个JS。

Scene.platform = new MenuItem();
Scene.platform.init(...code...);

这很好用,但我有N个平台,我是如何创造动态的?

我尝试了:

for(i=0....){

Scene.platform+i = new MenuItem();  
or
Scene.platform.i = new MenuItem();

}

我需要这样的结果:

Scene.platform1 = new MenuItem();
Scene.platform2 = new MenuItem();
Scene.platform3 = new MenuItem();
它有可能吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

对于动态名称,您可以使用[]语法。

Scene['platform' + i] = new MenuItem(); 

实施例

const Scene = {};

for(let i = 0; i < 3; i++) {
  Scene['platform' + i] = {};
}

console.log(Scene);

但是考虑使用数组而不是对象并将项目推送到该数组中。然后你可以使用索引来获取,例如,第一项来自[0],你的对象样式可以命名为platform0

const Scene = { platforms: [] };

for(let i = 0; i < 3; i++) {
  Scene.platforms.push({});
}

console.log(Scene.platforms[0]);

答案 1 :(得分:1)

使用数组:

Scene.platforms = [];
for (var i = 0; i < count; ++i) {
    Scene.platforms.push(new MenuItem());
}

稍后,要访问它们,要么循环遍历数组(请参阅我的其他答案here)或索引它。例如,如果你想要第一个:

Scene.platforms[0].doSomething();

答案 2 :(得分:0)

任何时候你都有这样的变量:

platform1
platform2
platform...
platformN

你真正想要的是数组。给你的对象一个名为platforms的数组,然后你可以存储你的平台&#34;在那个数组中。例如,如果你有这个:

Scene.platforms = [];

然后你可以将元素推送到它:

for (var i = 0; i < someAmount; i++) {
    Scene.platforms.push(new MenuItem());
}