Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将开关转换为对象_Javascript - Fatal编程技术网

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说的,如果这是最好的方式,但它完成了任务,那我就是在撒谎。如果你想了解更多,请问另一个关于这里发生了什么的问题。=)