2009-04-14 11 views
4

Dans Action Script 3, vous pouvez écrire une classe qui définit un objet dynamique (MovieClip et Object sont deux exemples), ces objets peuvent être modifiés en cours d'exécution. Ce que je veux savoir s'il y a un moyen (en cours d'exécution, bien sûr) de savoir si un objet est dynamique ou non.Comment savoir si un objet est dynamique dans AS3

PS: Sans faire quelque chose comme ceci:

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

Répondre

6

CookieOfFortune a la bonne idée, mais malheureusement, le code lui-même a des problèmes, isDynamic est un attribut, et la valeur retournée sera un XMLList avec une valeur d'une chaîne qui reflète une valeur true ou false, pas un nœud enfant qui renvoie directement un booléen. Cela devrait ressembler plus à ceci:

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

ouais, j'étais paresseux. – CookieOfFortune

+0

Mais que faire si vous voulez tester dynamique afin d'éviter un appel à describeType .. sigh. –

3

Vous pouvez utiliser describeType de flash.utils pour décrire l'objet sous forme XML. Voici la référence à l'API: flash.utils.describeType

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

"if (type.isDynamic) renvoie vrai". Je pense que cela peut être fait simplement par "retour type.isDynamic" –

3

Soyez prudent!

Chaque fois que vous souhaitez utiliser la fonction describeType(), s'il vous plaîts'il vous plaîts'il vous plaît utiliser la variation:

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

Performance de faire des appels répétés à l'exécution des machines de réflexion sera absolument sucer . C'est pourquoi Adobe a inventé la classe DescribeTypeCache.

2

Ceci est un très vieux article, mais je vais ajouter une option pour les futurs chercheurs.

AS3 a construit dans le moyen de le faire:

mx.utils.ObjectUtil.isDynamicObject(yourObject); 

En savoir plus sur ce here.

+0

Comme nous pouvons le voir dans http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/ObjectUtil.as isDynamicObject utilise try ... catch – Aquahawk

Questions connexes