gpt4 book ai didi

javascript - 另一个变量中的 JS 变量

转载 作者:行者123 更新时间:2023-11-29 10:49:36 26 4
gpt4 key购买 nike

我有一个函数会使用其他变量,具体取决于传递的内容。

this = ActionBar(slot) slot contains "one".

我想在里面创建一个像 object.slot.name 这样的调用,但它应该事先转换它以使命令看起来像 object.one.name。有没有办法在 javascript/jquery 中做到这一点?

我依稀记得一些其他语言将此作为 {slot} 或类似的东西。

抱歉,如果这个问题已经被问过,我也检查了 google 和 stackoverflow,但没有找到答案。

我还想知道这种变量传递的正确编程术语是什么?

编辑它导致误解。我正在研究 OOP js,所以 object 是一个对象,one 是一个对象,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)
}

最佳答案

真的不清楚你当前的结构是什么 (现在你已经发布了代码更清楚了,请参阅下面的“更新”),但从根本上来说是这样做的< em>某种 JavaScript 中的一件事就是拥有一个容器对象。 (如果您还没有,请介绍一个。)然后 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 中可以通过两种不同的方式引用这些属性:

  1. 使用点符号和文字名称,例如container.one,或者

  2. 在字符串中使用括号符号和名称,例如容器["one"]

除了属性名称的来源外,它们完全相同。当然,在第二种情况下,属性名称不必是文字 字符串,它可以是任何表达式的结果,包括变量引用(例如,您可以从 插槽)。

这适用于所有对象属性,包括引用函数的属性。我提到这个只是因为你在你的问题中提到了功能,所以如果你需要,你可以这样做:

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)
}

没有专门的名称。您将一个属性名称传递给一个函数,该函数正在使用该名称查找 player 对象上的属性。在其他一些语言中,这可能被称为“反射”,但该术语并不真正适用于 JavaScript 等动态语言。

关于javascript - 另一个变量中的 JS 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com