我正在为视频游戏制作一个小程序。问题在于,当它描述页面中的错误时,它会将某些对象读取为未定义的对象。
$(document).ready(function(){
//A roster for all character choices.
var roster = {
Riven:{name: "Riven", rival: Jax, rival2: Pantheon},
Pantheon:{name: "Pantheon", rival: Olaf, rival2: Darius},
Veigar:{name: "Veigar", rival: Akali, rival2: Fizz},
Olaf:{name: "Olaf", rival: Kayle, rival2: Kennen},
Jax:{name: "Jax", rival: Malphite, rival2: Pantheon},
Akali:{name: "Akali", rival: Garen, rival2: LeeSin},
Malphite:{},
Darius:{},
LeeSin:{},
Garen:{},
Kayle:{},
Fizz:{},
};
它说对象Darius没有在Pantheon的对象中定义,或者在我在这段代码之后引用Darius的任何时候。但是,定义了Olaf,Akali和具有完整对象属性列表的任何人。我尝试将这些属性放入正在读取的对象中,因为这些属性未定义,但这不起作用。我是JavaScript的新手,我不知道该怎么做。如果它是相关的,我在我的HTML代码之前在脚本中调用jQuery库。
答案 0 :(得分:0)
正如@charlietfl在评论中提到的那样,您尚未定义名为Jax
的变量。定义roster
后,您可以引用roster.Jax
,但在完成对象定义之前无法引用它,因为在此之前roster
尚未定义。
你必须这样做:
var roster = {
Riven:{name: "Riven"},
Pantheon:{name: "Pantheon"},
Veigar:{name: "Veigar"},
Olaf:{name: "Olaf"},
Jax:{name: "Jax"},
Akali:{name: "Akali"},
Malphite:{},
Darius:{},
LeeSin:{},
Garen:{},
Kayle:{},
Fizz:{},
};
然后分配这样的竞争对手:
roster.Riven.rival = roster.Jax;
那将是一团糟,所以我将从如下的数组开始。 (注意此时rival
和rival2
属性只是名称(字符串)。)
var characters = [
{ name: 'Riven', rival: 'Jax', rival2: 'Pantheon' },
{ name: 'Pantheon', rival: 'Olaf', rival2: 'Darius' },
{ name: 'Veigar', rival: 'Akali', rival2: 'Fizz' },
{ name: 'Olaf', rival: 'Kayle', rival2: 'Kennen' },
{ name: 'Jax', rival: 'Malphite', rival2: 'Pantheon' },
{ name: 'Akali', rival: 'Garen', rival2: 'LeeSin' },
{ name: 'Malphite' },
{ name: 'Darius' },
{ name: 'LeeSin' },
{ name: 'Garen' },
{ name: 'Kayle' },
{ name: 'Fizz' }
];
然后,您可以通过执行以下操作从阵列中创建名单对象。 (此时rival
和rival2
属性仍然只是名称(字符串)。)
var roster = {};
characters.forEach(function(character) {
roster[character.name] = character;
});
如果您确实希望rival
和rival2
属性成为对象引用而不仅仅是名称,您可以使用以下代码转换它们。
characters.forEach(function(character) {
character.rival = roster[character.rival];
character.rival2 = roster[character.rival2];
});
如果你想支持两个以上的竞争对手:jsfiddle
答案 1 :(得分:0)
也许你拆分对象的声明:
// here is an empty or a default setting, just to avoid
// an undefined exception
var roster = {
Malphite:{},
Darius:{},
LeeSin:{},
Garen:{},
Kayle:{},
Fizz:{},
};
然后是其他属性:
// here's the real declaration
roster = {
Riven:{name: "Riven", rival: roster.Jax, rival2: roster.Pantheon},
Pantheon:{name: "Pantheon", rival: roster.Olaf, rival2: roster.Darius},
Veigar:{name: "Veigar", rival: roster.Akali, rival2: roster.Fizz},
Olaf:{name: "Olaf", rival: roster.Kayle, rival2: roster.Kennen},
Jax:{name: "Jax", rival: roster.Malphite, rival2: roster.Pantheon},
Akali:{name: "Akali", rival: roster.Garen, rival2: roster.LeeSin},
Malphite:{},
Darius:{},
LeeSin:{},
Garen:{},
Kayle:{},
Fizz:{},
};
在访问对象的属性
之前注意roster.
前缀