Bonjour,
j'ai un petit problème pour ajouter dynamiquement des méthodes à mes objets à partir du nom de la méthode.
Tout d'abord j'ai un fichier avec des méthodes particulières :
1 2 3 4 5 6 7 8
| // FICHIER 1
function maMethodeMachin(unParametre){
blablabla;
}
function maMethodeTruc(unParametre){
blablabla;
} |
d'autre part j'ai un fichier xml qui décrit les propriétés de certains objets assez semblables mais certains ayant des méthodes particulières.
1 2 3 4 5 6 7 8 9 10
| // FICHIER XML
<UneChose Name="Bidule"/>
<UneChose Name="Machin">
<MethodeSpeciale Name="maMethodeMachin">
</Objet>
<UneChose Name="Truc">
<MethodeSpeciale Name="maMethodeTruc">
</Objet> |
dans mon code je récupère le fichier xml et je crée des "choses" en fonction des besoins (on demande unBidule OU unMachin OU ...).
1 2 3
| // FICHIER 2
var unBidule = new Chose();
var unMachin = new Chose(); |
et c'est là que je bloque.
Comment ajouter dynamiquement la méthode "maMethodeMachin" à unMachin ?
J'ai ceci
1 2
| // FICHIER 2
var nomFonctionSpeciale = getNomFonctionSpecialeDepuisLeXML(); // ici je récupère un String qui vaut "maMethodeMachin" |
Mais ensuite ? Comment interpréter le contenue de nomFonctionSpeciale pour obtenir l'équivalent de
unMachin[nomFonctionSpeciale] = maMethodeMachin;
Actuellement j'utilise un artifice dans le premier fichier
1 2 3 4 5 6 7 8
| // FICHIER 1
function getMethode(unNomDeMethode){
switch (unNomDeMethode){
case "maMethodeTruc": return maMethodeTruc;
case "maMethodeBidule": return maMethodeBidule;
...
}
} |
mais ça oblige à compléter cette fonction dès que je rajoute une nouvelle méthode spéciale et il va y en avoir beaucoup.
Je cherche quelque chose comme
unMachin[nomFonctionSpeciale] = FaisLeLienVers(maMethodeMachin);
J'ai choisi cette approche car je ne voulais pas créer plein de classes supplémentaires à chaque fois qu'il fallait rajouter un comportement supplémentaire spécifique pour uneChose. Je précise que si j'utilise JavaScript ce n'est pas sur un site web, il n'y a pas de problème de version de navigateur etc....
Merci pour votre aide,
bon code,
kerinel
Partager