JS变量在另一个变量中

时间:2012-10-27 16:38:21

标签: javascript jquery

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

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

1 个答案:

答案 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中可以通过两种不同的方式引用它们:

  1. 使用点表示法和文字名称,例如container.one

  2. 在字符串中使用括号表示法和名称,例如container["one"]

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

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

    slot

    ...在function foo(slot) { container[slot](); } 上调用container参数所拥有的属性的函数。因此,如果slotslot,则会"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等动态语言。