2011-12-14 78 views
2

考慮到您不能在動態函數中使用「this」,有沒有什麼辦法可以在靜態函數中使用動態變量?靜態函數中的動態變量名稱

我所試圖做的事:

public static function convertToDynamicString(pString:String):String 
{ 
    if(pString == "" || pString == null) return ""; 
    var re:RegExp = /(\{\w+\})/; 
    var results:Array = pString.split(re); 
    var dynamicString:String = ""; 
    for each(var pWord:String in results) 
    { 
     if(pWord.substr(0, 1) == "{") dynamicString += this[pWord.substring(1, (pWord.length - 1))];  
     else dynamicString += pWord; 
    } 
    return dynamicString; 
} 

問題:

這個[ 「變量名」]沒有在靜態函數

+1

'這'意味着你已經創建了你的類的一個實例,當你執行yourClass.convertToDynamicString()時這不會發生。 – Frank 2011-12-14 22:27:06

回答

5

不知道你要 「本」 是什麼工作以便引用,但假設您有一個名爲「Foo」的類包含您的靜態函數,只需使用Foo[str];

或者,創建一個靜態本地對象:

private static var _this:Object = {//your dynamic stuff} 

然後使用「_this」。

0

您可以將所有內容從實例(作爲參數)傳遞到您需要的靜態函數。換句話說,該實例可以查看和引用靜態,但靜態函數無法查看或引用某個特例實例。

0

如果需要引用靜態類的屬性,你可以使用
StaticClassName.staticProperty

public static class MyClass{ 
    public static myProperty:* 

    .... 

    public static function someFunction():void{ 
     MyClass.myProperty 
     } 

    } 

如果你想從靜態類參考實例也沒有辦法(如你所說)使用這個關鍵字。無論如何,有一個工作。你可以聲明實例參數和實例傳遞給靜態方法

下面的代碼:

public static class Myclass{ 
    public static function myFunc(parm1:*,param2:*,instance:[type of the istance or generic *]):void{ 

    ....now you can use instance.property!!!! 
    } 
} 

,然後你可以這樣調用它

MyClass.myFunc('foo','bar',this) 

希望這可以幫助您。
再見!
Luke