2009-04-14 5 views
4

동작 스크립트 3에서 동적 개체 (MovieClip 및 Object는 두 가지 예)를 정의하는 클래스를 작성할 수 있으며이 개체는 런타임에 수정할 수 있습니다. 내가 알고 싶은 것은 특정 객체가 동적인지 아닌지를 알기위한 어떤 방법 (런타임에는 물론)입니다.AS3에서 개체가 동적인지 확인하는 방법

PS :이 같은 것을하지 않고 :

function isDynamic(object) { 
    try { 
     object.newProperty = 'someValue' 
    } catch (e) { 
     return false 
    } 
    return true 
} 

답변

6

CookieOfFortune이 올바른 생각을 가지고 있지만, 불행히도 코드 자체가 문제가 isDynamic는 속성이며, 반환 값은 반영하는 문자열의 값을 가지는 XMLList의 것 true 또는 false 값이며 부울을 직접 반환하는 자식 노드가 아닙니다. 다음과 같이 보입니다.

function isDynamic(object) : Boolean 
{ 
    var type:XML = describeType(object); 
    return [email protected]() == "true"; 
}
+0

예, 나는 게으르다. – CookieOfFortune

+0

그러나 describeType .. sigh에 대한 호출을 피하기 위해 동적 테스트를 원하면 어떻게해야할까요? –

3

당신은 XML 형태의 객체를 설명하는 flash.utils의에서있는 describeType를 사용할 수 있습니다. 다음은 API에 대한 참조입니다 : flash.utils.describeType

function isDynamic(object) { 
    var type:XML = describeType(object); 
    if ([email protected] == "true") return true; 
    return false; 
} 
+0

"if (type.isDynamic) true를 반환합니다." 나는 이것이 "return type.isDynamic"에 의해서 만들어 질 수 있다고 생각한다. –

3

주의하시기 바랍니다. 절대적으로 를 빨아 런타임에 반사 기계를 반복 호출을의

import mx.utils.DescribeTypeCache; 
var typeDesc:XML = DescribeTypeCache.describeType(object).typeDescription; 

성능 :

언제 당신은, 하시기 바랍니다이 변화를 이용하시기 바랍니다하십시오있는 describeType() 함수를 사용하려면 . 이것이 바로 Adobe가 DescribeTypeCache 클래스를 발명 한 이유입니다.

2

이것은 매우 오래된 게시물이지만 향후 검색 자에게 옵션을 추가하겠습니다.

AS3는이 일의 방식으로 내장되어 있습니다 :

mx.utils.ObjectUtil.isDynamicObject(yourObject); 

here에 대해 자세히 알아보십시오.

+0

http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/ObjectUtil.as에서 볼 수 있듯이 isDynamicObject는 try ... catch를 사용합니다. – Aquahawk

관련 문제