我正在尝试制作一个函数,它接受7位代码(至少),然后加载字符的图像/元素,从而从代码中创建一个字符。
我写了这个代码:
<script type="text/javascript">
var skins = [];
skins["w"] = "http://example.com/char_elements/base.png";
var eyes = [];
eyes["b"] = "http://example.com/char_elements/eyes/blue.png";
eyes["g"] = "http://example.com/char_elements/eyes/green.png";
eyes["r"] = "http://example.com/char_elements/eyes/red.png";
var hair = [];
hair["b"] = "http://example.com/char_elements/hair/black.png";
hair["w"] = "http://example.com/char_elements/hair/blond.png";
hair["s"] = "http://example.com/char_elements/hair/brown.png";
var mouth = [];
mouth["h"] = "http://example.com/char_elements/mouth/happy.png";
var pants = [];
pants["s"] = "http://example.com/char_elements/pants/shorts.png";
var shoes = [];
shoes["b"] = "http://example.com/char_elements/shoes/black.png";
var torso = [];
torso["s"] = "http://example.com/char_elements/torso/shirt.png"
function LoadChar(code){
var data = code.split(/(?=[a-z])/i);
var skins = [skins[data[0]], eyes[data[1]], hair[data[2]], mouth[data[3]], pants[data[4]], shoes[data[5]], torso[data[6]]];
document.getElementById("out").innerHTML = skins.toString();
}
</script>
<div id="out"></div>
但是,当我调用LoadChar("wgbhsbs")时;
它刺痛了我"无法读取未定义的属性'w'"
我还是JS中数组的新手,所以我确信我犯了一些简单的语法错误或做了一些错误。
所以它的作用是:
1) 接受代码并将其拆分为7个元素(总是7个,没有其他元素),将其作为数组存储在"data"变量中。2) 通过加载:skin[代码中的数字]和其他元素来构建"skins"数组。3) 出于测试目的,我试图输出skins数组,但它在步骤2停止了。
对此有什么解释吗?
您正在重新创建先前定义的skins
变量。
对函数中的变量使用不同的名称,就可以了。
var skins = [];
skins["w"] = "http://example.com/char_elements/base.png";
var eyes = [];
eyes["b"] = "http://example.com/char_elements/eyes/blue.png";
eyes["g"] = "http://example.com/char_elements/eyes/green.png";
eyes["r"] = "http://example.com/char_elements/eyes/red.png";
var hair = [];
hair["b"] = "http://example.com/char_elements/hair/black.png";
hair["w"] = "http://example.com/char_elements/hair/blond.png";
hair["s"] = "http://example.com/char_elements/hair/brown.png";
var mouth = [];
mouth["h"] = "http://example.com/char_elements/mouth/happy.png";
var pants = [];
pants["s"] = "http://example.com/char_elements/pants/shorts.png";
var shoes = [];
shoes["b"] = "http://example.com/char_elements/shoes/black.png";
var torso = [];
torso["s"] = "http://example.com/char_elements/torso/shirt.png"
function LoadChar(code){
var data = code.split(/(?=[a-z])/i);
var other_variable = [skins[data[0]], eyes[data[1]], hair[data[2]], mouth[data[3]], pants[data[4]], shoes[data[5]], torso[data[6]]];
alert(other_variable.toString());
}
LoadChar("wgbhsbs");
您正在定义对象的属性。不是数组。
更改
var skins = [];
skins["w"] = "http://example.com/char_elements/base.png";
至
var skins = {};
skins.w = "http://example.com/char_elements/base.png";
此外,正如LcSalazar所指出的,您正在LoadChar函数中重新定义skins
。
Fiddle