2010-09-16 115 views
2

我有这样的代码:转换切换到对象

var params = Spry.Utils.getLocationParamsAsObject(); 
theLeague = params.league; 
switch (theLeague) 
{ 
case 'boyswinter': 
    var Soccer = new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}); 
    break; 
case 'girlswinter': 
    var Soccer = new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 1}); 
    break; 
default: 
    var Soccer = new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}); 
} 

我想使用替代的切换,我发现这个代码位作为指导使用:

var whatToBring = { 
    "Sunny" : "Sunscreen and hat", 
    "Rain" : "Umbrella and boots", 
    "Cold" : "Scarf and Gloves", 
    "Default" : "Play it by ear" 
} 
var gear = whatToBring[weather] || whatToBring["Default"]; 

然而,我不知道如何交换我的东西,以便它的工作。这应该很容易,但作为一名JS初学者,我无法将头围住它。任何帮助将不胜感激。谢谢。

回答

2

我不知道,如果使用对象是这里最好的方法,但在任何情况下,这应该工作。

var leagueMap = { 
    "boyswinter" : function(){ return new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}); }, 
    "girlswinter" : function(){ return new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 1}); }, 
    "Default" : function(){ return new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}); } 
} 
var Soccer = (leagueMap[theLeague] || leagueMap["Default"])(); 
+0

谢谢大家。这个解决方案做到了。如果我说我确切地知道这里发生了什么,或者像BBonifield所说的那样,如果这是最好的方法去做,那么我会说谎,但它完成了工作。 – Beau 2010-09-17 01:40:02

+0

如果您想了解更多信息,可以询问另一个有关这里发生了什么的问题。 =) – 2010-09-18 14:27:10

0

从范例翻译这将是这样的:

var SoccerFactory = { 
    'boyswinter' : new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}), 
    'girlswinter' : new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 1}), 
    'default' : new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}) 
}; 

var Soccer = SoccerFactory[theLeague] || SoccerFactory['default']; 

请让我知道,如果你想使用的概念进一步移出。我不确定你无法理解哪些部分。

编辑

甚至更​​好!

var SoccerFactory = { 
    'boyswinter' : new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}), 
    'girlswinter' : new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 1}), 
    'default' : this['boyswinter'] 
}; 

var Soccer = SoccerFactory[theLeague] || SoccerFactory['default']; 

重复自己是不好的。 =)

+0

这会产生不需要的对象。我建议用lambda函数包装创建块。 – BBonifield 2010-09-16 23:51:34

+0

是的你是对的。我只是想知道为什么BlackTigerX是这样做的,只要你发布你的答案,它就会打我。 – 2010-09-16 23:52:26

0

应该是这样的:

var theLeague = { 
    "boyswinter" : function() { return new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}); }, 
    "girlswinter" : function() { return new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 1}); }, 
    "Default" : function() { return new Spry.Widget.TabbedPanels("Soccer", {defaultTab: 0}); }, 
} 
var l = theLeague[league] || theLeague["Default"]; 
+0

Marc,记下我对你的帖子的评论。这就是为什么。 – BBonifield 2010-09-16 23:52:16