转换切换到对象
我有这样的代码:转换切换到对象
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初学者,我无法将头围住它。任何帮助将不胜感激。谢谢。
我不知道,如果使用对象是这里最好的方法,但在任何情况下,这应该工作。
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"])();
从范例翻译这将是这样的:
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'];
重复自己是不好的。 =)
这会产生不需要的对象。我建议用lambda函数包装创建块。 – BBonifield 2010-09-16 23:51:34
是的你是对的。我只是想知道为什么BlackTigerX是这样做的,只要你发布你的答案,它就会打我。 – 2010-09-16 23:52:26
应该是这样的:
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"];
Marc,记下我对你的帖子的评论。这就是为什么。 – BBonifield 2010-09-16 23:52:16
谢谢大家。这个解决方案做到了。如果我说我确切地知道这里发生了什么,或者像BBonifield所说的那样,如果这是最好的方法去做,那么我会说谎,但它完成了工作。 – Beau 2010-09-17 01:40:02
如果您想了解更多信息,可以询问另一个有关这里发生了什么的问题。 =) – 2010-09-18 14:27:10