数组变量和函数的动态名称

时间:2014-07-05 09:12:53

标签: javascript

我最近一直在寻找动态变量名。 window["varName"+dynamic part]

对我来说效果很好

但有没有办法用数组做到这一点?

var monster2_data=[2,"Ugly Gremlin",20,"1-4"]
var monster3_data=[3,"Gremlin Mage",20,"3-7"]

function create_enemy(number){
document.getElementById("image").src="i/monstras"+number+".jpg";
document.getElementById("image").style.height="350px";
document.getElementById("image").setAttribute( "onClick", window["startbattle"+number+"();"] );
document.getElementById("name_of_monster").innerHTML="<span style=\"color:rgb(181,230,29);margin-left:-125px;\"> Level " +monster3_data[0]+": </span>"+monster3_data[1];
document.getElementById("monster_damage").innerHTML="Damage: "+monster3_data[3];
document.getElementById("monsterhp").max=monster3_data[2];
document.getElementById("monsterhp").value=monster3_data[2];
    }

正如您在此部分代码中看到的,我需要数组变量的动态名称。我也尝试了window,但它返回undefined

document.getElementById("image").setAttribute( "onClick", window["startbattle"+number+"();"] );

此行特别返回为:onClick=undefined

monster3_data[2];的部分工作正常,但我需要它像monster(number)_data[2]

所以...我的问题是:如何为函数和数组变量创建动态名称?

2 个答案:

答案 0 :(得分:1)

使用addEventListener添加事件处理程序。第二个参数是函数,而不是函数调用,所以你不需要括号。

document.getElementById("image").addEventListener("click", window["startbattle"+number]);

如果要使用该属性,则应为:

document.getElementById("image").onclick = window["startbattle"+number];

或:

document.getElementById("image").setAttribute("onclick", "startbattle"+number+"();");

在最后一种情况下,您不需要window[...],因为setAttribute将其第二个参数转换为字符串 - 您无法在其中放置函数。这被视为要执行的Javascript,并且将在全局范围内查找函数名称,因此无需指定window

答案 1 :(得分:0)

&#34;我需要数组变量的动态名称。&#34;不,你没有。没有它们会更好。反正我是这么认为的。而不是每个怪物/级别的单独变量,创建一个包含monster2_datamonster3_data的对象。 (除了你已经选择window作为你的对象之外,你已经做了什么。你应该尽可能避免使用全局变量。)另外,startbattle2startbattle3monster2_data应包含monster3_data

var monster_data = {
    '2': [2,"Ugly Gremlin",20,"1-4",startbattle2],
    '3': [3,"Gremlin Mage",20,"3-7",startbattle3]
};

var do_battle;

function create_enemy(number){
    var monster = monster_data[number];
    do_battle = monster[4];
    document.getElementById("image").src="i/monstras"+number+".jpg";
    document.getElementById("image").style.height="350px";
    document.getElementById("image").setAttribute( "onClick", "do_battle();" );
    document.getElementById("name_of_monster").innerHTML="<span style=\"color:rgb(181,230,29);margin-left:-125px;\"> Level " +monster[0]+": </span>"+monster[1];
    document.getElementById("monster_damage").innerHTML="Damage: "+monster[3];
    document.getElementById("monsterhp").max=monster[2];
    document.getElementById("monsterhp").value=monster[2];
}