2013-11-26 3 views
1

Main.asActionScript가 get 클래스 유형입니까?

package{ 
    public class Main extends Sprite{ 
     public function Main() { 
      new ProxyClass(new HiddenClass()) 
     } 
    } 
} 

class HiddenClass(){ 
    ... 
} 

ProxyClass.as

package{ 
    public class ProxyClass extends Sprite{ 
     public function ProxyClass(value:*) { 
      trace(value, value.constructor) // [object HiddenClass] [class HiddenClass] 
      switch (value.constructor) { 
       case Sprite: 
        ... 
        break; 
       case "class HiddenClass": //??????? 
        ... 
        break; 
      } 
     } 
    } 
} 

는 좀 레거시 코드를 가지고 Main.as.을 변경할 수 없습니다 내 ProxyClass 내에서 Class 유형의 값을 확인해야하지만 HiddenClass가 패키지를 벗어나 Main.as에서만 볼 수 있습니다. HiddenClass의 유효성을 검사하려면 어떻게해야합니까?

답변

2

글쎄, 보이는 속성이 아니기 때문에 그 정의를 얻지 못한다면, 여러분은 아마도 switch 문을 다시 작성하여 Object 대신 String을 사용해야 할 것입니다. value.constructor를 String으로 캐스팅 한 다음 case "[class HiddenClass]"으로 사용하십시오.

+0

예, 또는 디폴트 대소 문자를 사용하고 HiddenClass와 일치시키기 위해'value.constructor'의'toString()'값을 체크하십시오. 성공적으로 일치하면 ProxyClass의 정적 var에 클래스 정의를 캐시 한 다음 필요할 경우이를 확인할 수 있습니다. – Vesper

0

flash.utils.getQualifiedClassName을 사용하십시오. 패키지 + 클래스 이름을 제공하는 전역 함수입니다. 그래서 본질적으로

MyClass       // default package 
com.mycompany.mypackage::MyClass // package com.mycompany.mypackage 

: 예를 들어

package{ 
    import flash.utils.getQualifiedClassName; 

    public class ProxyClass extends Sprite{ 
     public function ProxyClass(value:*) { 
      trace(value, value.constructor) // [object HiddenClass] [class HiddenClass] 
      var strClass:String = getQualifiedClassName(value); 
      switch (strClass) { 
       case "flash.display::Sprite": 
        ... 
        break; 
       case "Main.as$9::ProxyClass": 
        ... 
        break; 
      } 
     } 
    } 
} 

확인이 문자열의 각 오른쪽 사람이 확인 될,하지만 난 숨겨진 것을 포함하여 내 자신의 두 개의 클래스 (실험 때), 당신이 돌아올 가치가있는 것처럼 보입니다.