2010-11-15 18 views

Répondre

1

Non, il est impossible de savoir quoi que ce soit sur le bloc de code contenant au cours d'un constructeur, d'enregistrer ce que vous pouvez apprendre de la trace de la pile (si ce n'est pas disponible, sauf dans la version de débogage de Flash). Même si vous avez un point d'accès global pour la classe contenant, il ne permet toujours pas cet accès.

Pensez à un constructeur comme un appel de méthode. Dans une ligne de AS, il sera appelé avant l'affectation. Par exemple: var a:Foo = new Foo() le Foo est créé (le constructeur complète), puis a est rempli avec tout ce qui vient de se passer. Après ce point a ne restera agnostique de son contexte (en raison de l'encapsulation) à moins qu'il soit dit à ce sujet (ce qui est encore vrai sur un DisplayObject - essayer (var mc:MovieClip = new MovieClip(); trace(mc.root) //this will be null)


Je garde cela parce que. il est utile mais pas utile à votre réponse originale.

vous pouvez toujours obtenir le nom d'une classe avec getQualifiedClassName du package flash.utils. vous ne pouvez pas obtenir un displayObject bien après qu'il a été construit, mais vous pouvez simuler par (je crois) écrasant function set name(value:String):void Si cela ne fonctionne pas, alors essayez de le trouver après Event.ADDED et/ou Event.ADDED_TO_SAGE.

1

Le nom de l'instance n'est pas très important. Vous feriez mieux de stocker les références des instances dans un tableau.

var sizes:Array = new Array(); 
var big:SizeClass = new SizeClass(); 
sizes.push(big); 

Lorsque vous souhaitez y accéder, vous pouvez parcourir le tableau.

for (var i:uint = 0; i < list.length; ++i) 
{ 
    var size:SizeClass = list[i] as SizeClass; 
    trace(size); 
} 

BTW: Au lieu d'un nom d'instance, il est possible d'ajouter un index automatique à votre classe.

package 
{ 
    public class SizeClass 
    { 
    private static var global_index:int = 0; 
    public const INDEX:int = global_index ++; 
    } 
} 

auquel vous pouvez accéder à ceci:

var big:SizeClass = new SizeClass(); 
trace(big.INDEX) // 0 

var small:SizeClass = new SizeClass(); 
trace(small.INDEX)// 1 

source: http://blog.stroep.nl/2010/08/auto-increment-as3-class/

+0

j'écris une classe pour ma propre bibliothèque, et faisant référence au nom de l'instance serait une grande commodité, même mais je suis conscient que ce n'est probablement pas le meilleur design. – TheDarkIn1978