未定义JavaScript对象
我正在为自己制作一个视频游戏小程序。问题是,当它在页面中指出错误时,它读取某些未定义的对象未定义JavaScript对象,javascript,jquery,html,arrays,object,Javascript,Jquery,Html,Arrays,Object,我正在为自己制作一个视频游戏小程序。问题是,当它在页面中指出错误时,它读取某些未定义的对象 $(document).ready(function(){ //A roster for all character choices. var roster = { Riven:{name: "Riven", rival: Jax, rival2: Pantheon}, Pantheon:{name: "Pantheon",
$(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:{},
};
它说,在万神殿的对象中,或者在我引用大流士代码之后的任何时候,大流士对象都没有定义。但是,Olaf、Akali和具有完整对象属性列表的任何人都是被定义的。我尝试将这些属性放入正在读取的对象中,作为未定义的属性,但这不起作用。我是JavaScript新手,不知道该怎么做。如果相关的话,我将在脚本中调用jQuery库,然后在HTML代码中调用 正如@charlietfl在评论中提到的,您还没有定义名为
Jax
的变量。定义花名册
后,可以引用花名册.Jax
,但在定义完对象之前不能引用它,因为在此之前花名册
仍然未定义
您必须这样做:
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
属性此时只是名称(字符串)
然后,可以通过执行以下操作从数组创建花名册对象。(此时,rival
和rival2
属性仍然只是名称(字符串)
如果确实希望rival
和rival2
属性成为对象引用,而不仅仅是名称,则可以使用以下代码转换它们
characters.forEach(function(character) {
character.rival = roster[character.rival];
character.rival2 = roster[character.rival2];
});
如果您想支持两个以上的竞争对手:如果您拆分对象的声明,可能:
// 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:{},
};
请注意
花名册。
在访问对象属性之前的前缀可能是您没有关闭文档准备功能。})。对象属性键不是变量。您可以随时创建任意命名的属性,但您不能像在嵌套对象中那样使用该属性名作为变量。这只是一个小问题——为什么Jax不是万神殿的竞争对手之一?@JonMarkPerry没有理由。只是想让代码正常工作。:)
// 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:{},
};