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...