2010-09-16 155 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