Ton problème vient du fait que tu sembles confondre la fonction et le nom de la fonction. Autrement dit l'identifiant de l'objet, et l'objet lui-même.
Si tu écris:
var fonctions:Array = ["fonction1", "fonction2", "fonction3"];
ce que tu mets dans le tableau, ce sont des String (il y a des guillemets).
Ca n'a d'ailleurs pas de sens d'écrire ... functions[h] as String, puisque d'une part le tableau contient déjà des objets de type String (le cast est donc redondant), ensuite, parce qu'en castant String un objet que la méthode addEventListener attends de type Function, tu génères nécessairement une erreur.
Par contre, si tu veux mettre des fonctions dans ton tableau, tu dois écrire:
var fonctions:Array = [fonction1, fonction2, fonction3];
(sans guillemets). Ainsi ce sont bien les fonctions que tu mets dans le tableau, et nom pas les noms des fonctions.
Ainsi, le code suivant devra être tout simplement:
fondBouton.addEventListener (MouseEvent.CLICK, fonctions[h]);
(notes qu'écrire ...fonctions[h] as Function serait juste, mais à nouveau redondant).
Par ailleurs grâce à son nom, tu peux récupérer une fonction, c'est à dire en fait la méthode d'un objet.
myFunction = myObject["functionName"];
Or ici, à priori, l'objet est celui dans lequel tu es en train d''exécuter ton code, c'est à dire "cet objet ci" autrement dit l'objet auquel tu accèdes via le mot clé this.
Tu peux donc écrire:
myFunction = this["functionName"];
Enfin, pour compléter l'exemple, tu peux déclencher l'exécution de la fonction ainsi:
this["functionName"](arguments);
Pour conclure, tu as deux possibilités pour résoudre ton problème:
Soit tu stockes les noms des fonctions:
1 2
| var fonctions:Array = ["fonction1", "fonction2", "fonction3"];
fondBouton.addEventListener (MouseEvent.CLICK, this[fonctions[h]]); |
Soit tu stockes les fonctions elles-mêmes (ce qui est plus propre):
1 2
| var fonctions:Array = [fonction1, fonction2, fonction3];
fondBouton.addEventListener (MouseEvent.CLICK, fonctions[h]); |
Voilà, ça devrait marcher
Partager