2009-07-27 82 views
2

如果我只有一個對象的實例,我可以調用它的類的靜態方法嗎?爲了好玩,假設我不知道類的名稱是什麼,只有靜態方法的名稱。只調用一個實例的類的靜態方法

我可以這樣做嗎?我該怎麼做呢?

回答

7

您可以使用該對象的構造屬性來獲取該對象的類對象的引用,你就可以從該類對象調用靜態變量

package{ 
     import flash.display.Sprite; 

     public class Test extends Sprite{ 

      public function Test(){ 
       var variable : A = new A(); 
       trace((variable as Object).constructor.a()); 

      } 
     } 
    } 
    class A{ 
     static function a() : String{ 
      return "test"; 
     } 
    } 
+0

+1爲簡單起見。 – 2009-07-27 21:53:58

+0

請記住,構造函數屬性在某些基於代理的類(如XML和XMLList)上不起作用。 – 2009-07-28 21:47:40

+0

trivally編輯更完美地回答被問到的問題 – 2012-12-14 17:55:16

1

通過它的實例獲取類引用。

var className:string = getQualifiedClassName(object); //returns the class name  
var classObj:Class = getDefinitionByName(className) as Class; //get a Class object 

也看到這一點 - How to get type of variable? and instantiate it?

+0

剛纔意識到即使引用了Class對象,您也可能無法調用靜態方法。我想這個答案只有一半。我無法訪問flex編譯器,對不起。 – 2009-07-27 21:43:56

+0

是的,你可以,看看我上面的答案。 – loungerdork 2011-07-28 06:54:44

4

有一個更簡單的方法,但是這裏假定存在靜態函數。

var myclass:Class = getDefinitionByName("MyClass") as Class; 
myclass["myStaticMethod"](); 

這有點令我感到驚訝,這種語法的作品。

+0

是否myClass.myStaticMethod()不起作用? – 2012-12-14 16:15:50

+0

它不會通過編譯器。 1180:調用一個可能未定義的方法myStaticMethod。 – loungerdork 2014-05-08 13:57:52

相關問題