我正在尝试访问数组中的对象值,但是每次都会出现未定义的对象值。如何让数组“ terrain”使用“ Dirt”对象变量(例如SpawnChance)?
var terrain = new Array("Dirt1", "Dirt2", "Dirt3");
var Dirt1 = new Object();
Dirt1.Name = 'Dirt1';
Dirt1.Level = '1';
Dirt1.SpawnChance = '70';
var Dirt2 = new Object();
Dirt2.Name = 'Dirt2';
Dirt2.Level = '1';
Dirt2.SpawnChance = '15';
var Dirt3 = new Object();
Dirt3.Name = 'Dirt3';
Dirt3.Level = '1';
Dirt3.SpawnChance = '10';
if ($("#startingblock").hasClass("Dirt1")) {
var blockcount = (Math.floor(Math.random() * 20) + 1) * 2;
var blockcount = blockcount * blockcount;
var i = 0;
while (i < blockcount) {
var randomizer = (Math.floor(Math.random() * 100) + 1);
var terraintypes = terrain.length;
var terrainrandoms = (Math.floor(Math.random() * terraintypes) + 0);
var newrandomterrain = (terrain[terrainrandoms]);
var randomterrainspawnchance = newrandomterrain.SpawnChance;
terrain.push(newrandomterrain);
alert(newrandomterrain);
i++;
}
答案 0 :(得分:1)
您正在尝试访问字符串上的SpawnChance
方法-例如。 "Dirt1"
。您需要对象本身-这就是问题的根源:
var terrain = new Array("Dirt1", "Dirt2", "Dirt3");
只需改成这样:
var terrain = new Array(Dirt1, Dirt2, Dirt3);
(或更妙的是:
var terrain = [Dirt1, Dirt2, Dirt3]
没有理由使用Array
构造函数而不是原义形式)
请注意,您必须将其移动到代码中比这些对象的定义晚的位置。