Supprimer un objet au moyen de 'this' ? (Concerne aussi les classes)

Supprimer un objet au moyen de 'this' ? (Concerne aussi les classes) - Flash/ActionScript - Programmation

Marsh Posté le 28-06-2004 à 16:34:41    

Est-il possible de supprimer un objet à partir de 'this'?
 
     
 
    Le but est ici de crée une fonction d'auto-suppression dans une classe, et qui se chargerait de remettre à jour proprement les instances associées à un objet de la classe.
    Premièrement, donc, nous devons créer un classe, comme ceci :
 
dans le fichier 'MaClasse.as' (le nom du fichier doit être identique à celui de la classe)
     
    class MaClasse {
 
        static var Compteur : Number = 0;
             //nous créons ici un compteur relatif au nombre d'instance de MaClasse
 
        function MaClasse(){ // Constructeur de la Classe
            Compteur++; //Incrémente le nombre d'instances crées
        }
 
        function Suppression(){ // Fonction d'auto-suppression
            Compteur--; //Décremente le compteur d'intances
            /* ON POSE ICI LE SCRIPT DE SUPRESSION A DEFINIR */

        }
 
    }
 
Commentaires :
    'static' permet de définir des variables ou fonctions qui ne sont définies qu'une fois et apartiennent directement à MaClasse et non à chacune de ses intances. Quelle que soit l'instance de MaClasse qui les appelle, ces propriétés ont la même valeur. Elle ne sont accessibles que par les instances de la classe, et n'apparaissent pas dans le débogueur.
    Une fonction constructeur est une fonction appelée à chaque fois que l'on crée une nouvelle instance de la classe, elle sert généralement à initialiser les nouvelles instances et peut prendre autant de paramètres que nécéssaire. Elle porte systématiquement le même nom que la classe.
    Ici l'avantage de 'monObjet.Suppression()' par rapport à 'delete monObjet' est qu'elle met en même temps à jour le nombre d'instances de la Classe.
 
 
Maintenant que notre clase est crée, utilisons-la :
 
dans une animation flash (située dans le même dossier que MaClasse.as)
 
    import MaClasse.as;
     
    MonObjet = new MaClasse(); //Création d'une instance de MaClasse
        //Ici on peut utiliser MonObjet pour ce que l'on veut

    MonObjet.Suppression(); //Suppression de l'objet
 
 
 
Reste Maintenant à compléter la fonction MaClasse.Suppression() (autrement dit à remplacer : /* ON POSE ICI LE SCRIPT DE SUPRESSION A DEFINIR */)
 
C'est là qu'apparait le PB :
    Nous ne disposons pas du nom de l'instance, mais seulement de 'this'. Or 'this' est un pointeur et supprimer un pointeur ne supprime pas sa cible (c'est pas parceque l'on supprime le panneau indiquant la direction de Paris que Paris cesse d'exister...).
    Le problème est que le compilateur est censé gérer les pointeur automatiquement, et l'on ne pas pas agir là-dessus.
    A noter aussi, que Macromedia n'a pas jugé bon de proposer le pendant de la fonction constructeur, à savoir la fonction destructeur (présente, par exemple, en C++) qui est appelée lorsque l'on supprime l'objet (à l'appel de delete 'MonObjet').
 
les divers codes suivants sont inopérants :
   delete this;
   void(this);
   this = Void; //la valeur undefined est affectée à this, mais c'est sans intérêt
   this = undefined; // idem
   ...
 
 
 
 
Si certains d'entre vous ont des idées, elles sont les bienvenues...
 
 

Reply

Marsh Posté le 28-06-2004 à 16:34:41   

Reply

Marsh Posté le 30-06-2004 à 16:01:04    

Salut,
 
Est ce que tu as essayé de cibler ton instance en utilisant un eval();
eval permet de cibler le contenu d'une variable et non le nom de la variable elle même. Flash assimilera this en terme de cible et non de pointeur.
 
A+
aFaD
Une aide en programmation : http://www.progforum.net

Reply

Marsh Posté le 30-06-2004 à 23:56:04    

  eval() est fait pour evaluer des chaines de charactères. Avec 'this' en paramètres, généralement c'est pas terrible. Tu obtiens généralement 'undefined' (sauf peut être si tu est dans un objet de la classe error, auquel cas c'est la chîne de caratère contenu par la propriété 'Error.message' qui est évaluée...). Je pense donc que l'on peut oublier les formules du type eval(this).
    C'était bien essayé tout de même. Merci pour ton idée.

Reply

Marsh Posté le 01-07-2004 à 09:25:12    

afad a écrit :

Salut,
 
Est ce que tu as essayé de cibler ton instance en utilisant un eval();
eval permet de cibler le contenu d'une variable et non le nom de la variable elle même. Flash assimilera this en terme de cible et non de pointeur.
 
A+
aFaD
Une aide en programmation : http://www.progforum.net


SPAM :o [:ban]
 


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed