【问题标题】:Create JavaScript variable name from another variable从另一个变量创建 JavaScript 变量名
【发布时间】:2012-12-13 22:00:56
【问题描述】:

我有这个东西

function paymentPlan(name, price, days, active){
        this.name=name;
        this.price=price;
        this.days=days;
        this.active=active;
    }

    var plan_1 = new paymentPlan("unlimited", 0, -1, -1);
    var plan_2 = new paymentPlan("starter", 100, 7, 2);

我需要通过从另一个变量构建变量实例来选择其中一个对象实例,本质上是将数字添加到引用的末尾

例如,如果我需要在选择时打印出 plan_2 的名称,我需要像这样构建参考

var plan_id = 2;

alert( plan_+plan_id.name ); 

我该怎么做?

【问题讨论】:

  • ? plan_id 和 plan_ 不在上面的对象/代码中,你能澄清一下你的意思吗?
  • 为什么不用数组来代替,索引就是计划id

标签: javascript variables object reference


【解决方案1】:

您最好的方法是将计划存储在array 中。

var plans = [];
plans.push(new paymentPlan("unlimited", 0, -1, -1));
plans.push(new paymentPlan("starter", 100, 7, 2));

var plan_id = 1;
alert(plans[plan_id].name); // "starter"

【讨论】:

  • 哦,是的!为什么我不使用数组,我将使用数组。感谢您的帮助!!!!
  • @Aesthete,您可能希望将 plan_id = 2 更改为 plan_id = 1,因为您的示例中不存在 plans[2]
  • @Beetroot-Beetroot - 确实!好地方。固定。
  • 好吧,我的示例与代码中的内容有些不同,我使用 PHP 吐出 javascript 实例,“plan_”末尾的数字是计划的 id 号在数据库中,我需要通过它的 ID 号调用该计划,所以我什至不需要“plan_”我可以使用 plan[2] 代替。我在选择对象时做出了错误的选择。另外我的印象是你只能在堆栈溢出时选择一个答案,谢谢你的提示。
【解决方案2】:

如果你全局定义你的变量,那么你可以使用window对象:

window["plan_" + plan_id].name;

但是,您可以始终在本地定义的对象中初始化变量,例如:

var plans = {
    plan_1 : new paymentPlan("unlimited", 0, -1, -1),
    plan_2 : new paymentPlan("starter", 100, 7, 2)
};

plans["plan_" + plan_id].name;

【讨论】:

    【解决方案3】:

    使用父对象

    var plans = {};
    var plan_1 = new paymentPlan("unlimited", 0, -1, -1);
    plans["plan_1"] = plan_1;
    alert( plans["plan_"+plan_id.name] );
    

    【讨论】:

      【解决方案4】:

      尝试使用eval()

      alert(eval('plan_'+plan_id+'.name'));
      

      【讨论】:

      • @MattiMehtonen,这是刻板印象,如果你清理数据并且 100% 确定你在做什么,这是一个非常方便的工具。 BW 看看他们正在使用的 jQuery 'globalEval' ;)
      • @dmi3y。好吧。 (eval == evil) :)
      • 这个答案最接近 OP 的要求(尽管其他方法实现了相同的结果)。为了安全起见,您可以将其包裹在 if(!isNaN(plan_id)){} 中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      相关资源
      最近更新 更多