2016-07-07 24 views
1

我正在尋找一種凝結我的一些AS3代碼的方法,以避免幾乎重複的命令。使用字符串的AS3目標控制器類變量

問題是,我有幾乎相同名稱的多個變量,例如法語語言,英語語言,德語語言,西班牙語語言

我的控制器類包含公共靜態變量(這些變量可以跨多個類訪問),我需要一種能夠動態調用其中幾個變量的方法。如果這些變量都在類,你在呼喚他們可以做到這一點動態地訪問他們:

this["spanish"+"Language"] 

在AS3它不可能寫出這樣的:

Controller.this["spanish"+"Language"]

是否有任何如何實現這一目標?雖然一切正常,但我希望能夠儘可能減少我的代碼。

+0

爲什麼不直接使用一個靜態dictionairy在你的控制器類? – DodgerThud

+0

你可以擴充一點嗎? – AntBirch

+1

[參考資料](http://help.adobe。com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Dictionary.html)在您的Controller中創建一個公共靜態字典變量。當前傳遞的字符串(例如「spanishLanguage」)將是保存所需信息的對象的關鍵字。假設Dictionairy被稱爲'languages',您可以這樣稱呼它:'Controler.languages [「spanishLanguage」 ]' – DodgerThud

回答

0

它可以訪問類的public static性質這樣(假設類名是Controller在你的例子:

Controller['propertyName'] 

我不知道如何幫助有「最少的代碼」,但是這將是一個不同的主題/問題,這可能需要你想才達到什麼一些更多的細節。

說了這麼多,我喜歡的方式DodgerThud建議在一(dynamicObject分組相似的價值觀的意見或Dictonary,並給它一個合適的名稱請記住,如果您通過(文本)用戶輸入創建了作爲類或動態對象的關鍵字傳入的字符串,則應該對該數據的有效性進行一些檢查,否則您的程序可能會崩潰或向用戶公開其他字段。

0

這將是有意義的利用一組遺傳變量Dictionary對象:它提供了一個堅實的邏輯和它發生在工作...

我不認爲這是你要完成的任務。我可能是錯的。在AS3

課總是包裹package內 - 這是真正的你是否已經從在Flash,Flex,空氣或其他任何編譯...

不要讓的Adobe迷惑你。這隻在AS3中完成,才能使用基於Java的約定。無論如何,不​​幸的是,鬆散類型的語言經常被誤解。所以:

this["SuperObject"]["SubObject"]["ObjectsMethod"][ObjectsMethodsVariable"](args..); 

...在技術上是可靠的,因爲編譯器避開點符號,但在運行時,它會收集很多不必要的數據,以保持這些類型的呼叫。

如果效率成爲一個問題..

用途:

package packages { 
import flash.*.*: 
class This implements ISpecialInterface { 
// Data Objects and Function Model 
// for This Class 
} 
package packages { 
import... 
class ISpecialInterface extends IEventDispatcher