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

标签 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]

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

最佳答案

使用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/

相关文章:

php - 将变量从 php 传递到 javascript(安全)

javascript - 从 Javascript 运行 exe 文件

javascript - Nodejs使用mysql Sequelize RangeError

javascript - Firebase 出现错误。创建用户失败: First argument must contain the key "password" Angularjs

javascript - jQuery 动画不适用于我的导航栏

javascript - 如何动画显示/隐藏div?

javascript - 如何在此 javascript 文件中添加输入类型

javascript - *ngif 第一次点击后不工作。 Angular 6

javascript - Socket.io 传递回调函数

javascript - JQuery:禁用点击事件