我最近一直在寻找动态变量名。 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]
所以...我的问题是:如何为函数和数组变量创建动态名称?
最佳答案
使用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
。关于javascript - 数组变量和函数的动态名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24584832/