将切换转换为对象

时间:2010-09-16 23:36:40

标签: javascript

我有这段代码:

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初学者,我无法绕过它。任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分: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"])();

答案 1 :(得分: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'];

重复自己很糟糕。 =)

答案 2 :(得分: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"];