Javascript 将开关转换为对象
我有以下代码:Javascript 将开关转换为对象,javascript,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 = n
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 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'];
重复你自己是不好的 应该类似于:
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"];
我不知道在这里使用对象是否是最好的方法,但无论如何,这应该是可行的
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"])();
这会创建不需要的对象。我建议用lambda函数包装创建块。是的,你是对的。我只是想知道为什么BlackTigerX会这样做,当你发布你的答案时,我马上想到了。Marc,在你的帖子上记下我的评论。这就是为什么,谢谢大家。这个解决方案成功了。如果我说我确切地知道这里发生了什么,或者,像BBonifield说的,如果这是最好的方式,但它完成了任务,那我就是在撒谎。如果你想了解更多,请问另一个关于这里发生了什么的问题。=)