我有一个可以使用其他变量的函数,具体取决于传递的内容。
类似this = ActionBar(slot)
广告位包含“一个”。
我希望在object.slot.name
之内创建一个调用,但它应该事先转换它以使命令看起来像object.one.name
。有没有办法在javascript / jquery中执行此操作?
我隐约记得,其他一些语言就是{slot}或类似的东西。
很抱歉,如果已经提出这个问题,我也检查了google和stackoverflow,但没有找到答案。
此外,我想知道这种变量传递的正确编程术语是什么?
编辑它引起误解的原因。我正在研究OOP js,所以object是一个对象,一个是对象,name是一个属性,但是在传递时我将“one”作为字符串传递给函数。
尝试使用eval,点缀一个物体时它不起作用。
源代码:
function disableActionButton(slot){
$("#"+slot).attr("disabled","disabled")
gcd = player.slot.gcd*1000
cd = setInterval(function(){
gcd = gcd - 10
$("#"+slot).val(gcd+"ms").css("color","red");
},10)
setTimeout(function(){
window.clearInterval(cd)
$("#"+slot).removeAttr("disabled").css("color","black").val(player.slot.name);
}, player.slot.gcd*1000)
}
答案 0 :(得分:3)
目前还不清楚你目前的结构是什么 (现在你发布代码要清楚得多,见下面的“更新”),但从根本上说是这样做的方法< JavaScript中的em> sort 就是拥有一个容器对象。 (如果你还没有,请介绍一个。)然后slot
可以引用该对象的属性,如下所示:
var container = {
one: "This is one",
two: "This is two"
};
// ...
function foo(slot) {
console.log(container[slot]);
}
// ...
foo("one"); // ends up logging "This is one"
foo("two"); // ends up logging "This is two"
这是有效的,因为容器对象具有属性,在JavaScript中可以通过两种不同的方式引用它们:
使用点表示法和文字名称,例如container.one
或
在字符串中使用括号表示法和名称,例如container["one"]
。
除了属性名称来源之外,它们完全相同。当然,在第二种情况下,属性名称不必是 literal 字符串,它可以是任何表达式的结果,包括变量引用(例如,您可以从{获取名称) {1}})。
这适用于所有对象属性,包括引用函数的属性。我之所以提到这一点,只是因为你提到了问题中的功能,所以如果你需要,你可以这样做:
slot
...在function foo(slot) {
container[slot]();
}
上调用container
参数所拥有的属性的函数。因此,如果slot
为slot
,则会"one"
。
<强>更新强>:
您的来源直接回复上面的容器示例,只需将上述内容应用于它:
container.one()
或者,不是每次都查找插槽数据,而是抓住它一次并重复使用它:
function disableActionButton(slot){
$("#"+slot).attr("disabled","disabled")
// ---------v----v---- here
gcd = player[slot].gcd*1000
cd = setInterval(function(){
gcd = gcd - 10
$("#"+slot).val(gcd+"ms").css("color","red");
},10)
setTimeout(function(){
window.clearInterval(cd)
// ------------------------------------------------------------ and here--v----v
$("#"+slot).removeAttr("disabled").css("color","black").val(player[slot].name);
// ------v----v------- and here
}, player[slot].gcd*1000)
}
这没有特别的名字。您正在将属性名称传递给函数,该函数正在使用该名称查找function disableActionButton(slot){
// Grab it once...
var slotdata = player[slot];
$("#"+slot).attr("disabled","disabled")
// ---vvvvvvvvv--- then use it
gcd = slotdata.gcd*1000
cd = setInterval(function(){
gcd = gcd - 10
$("#"+slot).val(gcd+"ms").css("color","red");
},10)
setTimeout(function(){
window.clearInterval(cd)
$("#"+slot).removeAttr("disabled").css("color","black").val(slotdata.name);
}, slotdata.gcd*1000)
}
对象上的属性。在其他一些语言中,这可能被称为“反射”,但该术语并不真正适用于JavaScript等动态语言。