Javascript - 变量值是另一个变量的名称

时间:2013-01-18 18:26:17

标签: javascript variables

我有一组已定义的变量。我动态地将一个值设置为另一个变量,该变量最终成为其他一个定义变量的名称。我想这样做,所以我知道在页面上何时使用哪个设置变量。

var mwm = "blah"
var vp = "bleh"
var am = "bluh"

var mwm720 = "some link 1"
var mwm717 = "some link 2"
var vp720 = "some link 3"
var vp717 = "some link 4"
...

然后我运行了一些其他脚本,并根据条件将变量值设置为其他变量之一的名称。

var myClass = $(this).attr("class").split(' ')[1];
var currDiv = "div." + myClass;
var currVersion = $(this).parent().attr("id");
var linkVers = myClass + currVersion;

linkVers变量值总是最终为" mwm720"," mwm717"," vp720"等等。这就是我如何知道 时使用mwmw720或mwm717(等)变量。

期望的行为

如何获取警报/调用以使用存储在动态变量中的变量名的值?

让我们说alert(linkVers);返回&#34; mwm720&#34;。如何让$(currDiv).html(linkVers);插入mwm720变量的(这将是&#34;某些链接1和#34;),而不是变量的名称?< / p>

如果有更好的方法来尝试完成此行为,我当然会接受其他解决方案。

4 个答案:

答案 0 :(得分:5)

您应该将所有变量放在1个对象中。像:

var messsages = {
    wm : "blah",
    p : "bleh",
    m : "bluh",

    wm720 : "some link 1",
    wm717 : "some link 2",
    p720 : "some link 3",
    p717 : "some link 4"
}

然后在你的功能中你可以使用

alert(messages[linkVers]);

答案 1 :(得分:0)

最好不要使用一堆变量来占用窗口命名空间。使用对象。

var myProps = {
    mwm720 : "some link 1",
    mwm717 : "some link 2",
    vp720 : "some link 3",
    vp717 : "some link 4"
};

比你能做的

var foo = "mwm720";
console.log(myProps[foo]);

如果你真的想按照你编写的方式去做,那就要使用带括号表示法的窗口。

var foo = "mwm720";
console.log(window[foo]);

答案 2 :(得分:0)

我认为你要找的是eval

var myvar = "mvm720";
var mvm720 = "some link 1";

console.log(myvar);  // prints mvm720
console.log(eval(myvar));  //prints "some link"

所以在你的特定情况下:

eval ( $(currDiv).html(linkVers) ); 

您正在寻找什么

答案 3 :(得分:0)

更灵活的方法是按版本对变量进行分组。这样,您甚至不必担心将名称与版本连接起来。

var messsages = {
    720: {
        wm: "some link 1",
        p: "some link 3",
    },
    717: {
        wm: "some link 2",
        p: "some link 4",
    }
};

然后,您可以使用以下方式获取正确版本的链接文本:

var linkVers = messages[currVersion][myClass];

由于currVersion在整个脚本的生命周期内不会发生变化(因为您停留在同一页面上),因此您也可以在开始时缓存当前版本的消息。这样,您无需经常查找父级id

// In some high scope
var currMessages;

// At startup (e.g. DOM ready)
// You probably need to slightly adjust this
// depending on what $(this).parent() actually signifies
var currVersion = $(this).parent().attr("id");
currMessages = messages[currVersion];

// When retrieving the link text
var linkVers = currMessages[myClass];