두 가지 메소드 그룹이 작동하는 클래스 세트의 차이점은 무엇입니까 (예 : ApplicationDomain의 클래스 정의 세트와 getDefinitionByName 클래스 정의 세트).flash.utils.getDefinitionByName 대 ApplicationDomain의 클래스 정의 메소드
- ApplicationDomain. getDefinition/hasDefinition/getQualifiedDefinitionNames (플래시 플레이어 11.3+ 만, 문서화되지 않은)
- getDefinitionByName
그것은 응용 프로그램 도메인 계층 구조가 있음을 분명하고 정의가 일부 응용 프로그램 도메인이 아닌 다른 사람에 표시 될 수있다. 예를 들어 ApplicationDomain.getDefinition은 지정된 앱 도메인에 정의되어 있지 않지만 액세스 할 수있는 정의를 반환합니까? (예 : 도메인이 하위 도메인이고 부모에서 정의 된 정의를 찾으려면?) ApplicationDomain에 대한 설명서에는 "부모가 아직 정의하지 않은 경우에만로드 된 클래스가 정의됩니다."라는 내용이 나와 있습니다. "(ApplicationDomains)는 같은 클래스에 대한 여러 정의가 존재할 수 있으며 자식이 부모 정의를 재사용 할 수 있도록합니다." 에서 ApplicationDomain.getDefinition이 네임 스페이스 및 기능 클래스 정의에 추가 정의를 반환하는 반면
문서는 또한의 getDefinitionByName이 클래스 정의를 반환하는 것을 나타냅니다.
클래스 정의에만 관심이 있다고 가정하고 어떤 ApplicationDomains가 getDefinitionByName 검색을 수행합니까? (? 예를 들어 모든 도메인, 호출자에게 접근 현재/발신자 도메인 만, 또는 도메인)
이 초기 테스트는 혼란 : 위의 테스트에서
import flash.system.ApplicationDomain;
var d:ApplicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); //child of current domain
trace(ApplicationDomain.currentDomain.hasDefinition("flash.display.DisplayObject")); //true
trace(ApplicationDomain.currentDomain.getQualifiedDefinitionNames().length); //1 (the main timeline class definition only: Untitled_fla::MainTimeline)
trace(d.hasDefinition("flash.display.DisplayObject")); //false
, 한편으로, getQualifiedDefinitionNames 보고서 현재 타임 라인 클래스 만 현재 앱 도메인에 정의되어 있지만 getDefinition은 DisplayObject에 대해 true를 반환하여 부모 (시스템) 도메인에 정의가 있음을 알리는 것을 나타내지 만 손자 도메인의 최종 추적은 false를 반환하여 모순됩니다.
ApplicationDomain.currentDomain.parentDomain은 null을 반환합니다. "시스템 도메인에 현재 도메인을 포함한 모든 응용 프로그램 도메인이 포함되어 있습니다."및 "시스템 도메인을 제외한 모든 응용 프로그램 도메인에 다음 문법 설명과 직접적으로 부합됩니다. 연결된 상위 도메인. 메인 응용 프로그램의 응용 프로그램 도메인의 상위 도메인은 시스템 도메인입니다. "
모순은 여기 currentDomain는 정의가 있지만, currentDomain해야하는 부모, 자식 도메인을 만들고 액세스 할 때, 갑자기이 정의에 포함되지 않는 것을보고 어디에 매우 명백하다 :
trace(ApplicationDomain.currentDomain.hasDefinition("flash.display.DisplayObject")); //true
trace((new ApplicationDomain(ApplicationDomain.currentDomain)).parentDomain.hasDefinition("flash.display.DisplayObject")); //false! why?
을