2011-12-14 39 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