2009-07-27 2 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 для простоты. –

+0

Помните, что свойство конструктора не работает на некоторых прокси-классах, таких как XML и XMLList. –

+0

trivally отредактирован, чтобы более точно ответить на вопрос, задаваемый –

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

Просто понял, что вы, вероятно, не можете вызвать статический метод даже со ссылкой на объект класса. Думаю, этот ответ только на полпути. Извините, у меня нет доступа к компилятору flex. –

+0

Да, вы можете, посмотрите мой ответ выше. – loungerdork

4

Существует более простой способ, но это предполагает, что существуют статические функции.

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

Это меня удивило, что этот синтаксис работает.

+0

Не работает myClass.myStaticMethod()? –

+0

Он не передаст компилятор. 1180: Позвоните, возможно, с неопределенным методом myStaticMethod. – loungerdork

Смежные вопросы