2012-12-13 101 views
0

我有这样的对象从另一个变量

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

创建JavaScript变量的名字,我需要从另一个变量构建变量实例选择对象实例之一,基本上号码添加到基准结束

例如,如果我需要选择时打印出plan_2的名字,我需要建立像这样

var plan_id = 2; 

alert(plan_+plan_id.name); 

我该怎么做参考?

+1

? plan_id和plan_不在上面的对象/代码中,你能澄清你的意思吗? –

+0

为什么不使用数组,而是索引是计划编号 – Pablo

回答

1

如果全局定义的变量,那么你可以使用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; 
4

你最好的方法是将计划存储在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" 
+0

噢!为什么我没有使用数组,我将使用数组。谢谢你的帮助!!!! –

+0

@Aesthete,您可能会喜欢将'plan_id = 2'更改为'plan_id = 1',因为您的示例中不存在“plans [2]”。 –

+0

@甜菜根 - 甜菜根 - 的确!好点。固定。 – Aesthete

0

使用父对象

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

尝试使用eval()

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

(eval ===邪恶) –

+1

@MattiMehtonen,这是刻板印象,如果你清理数据和100%确定你在做什么这是非常方便的工具。 BW看看他们使用的jQuery'globalEval';) – dmi3y

+5

@ dmi3y。好吧。 (eval ==邪恶):) –