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 :
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.Code:
1
2
3
4
5
6
7
8 // FICHIER 1 function maMethodeMachin(unParametre){ blablabla; } function maMethodeTruc(unParametre){ blablabla; }
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 ...).Code:
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>
et c'est là que je bloque.Code:
1
2
3 // FICHIER 2 var unBidule = new Chose(); var unMachin = new Chose();
Comment ajouter dynamiquement la méthode "maMethodeMachin" à unMachin ?
J'ai ceci
Mais ensuite ? Comment interpréter le contenue de nomFonctionSpeciale pour obtenir l'équivalent deCode:
1
2 // FICHIER 2 var nomFonctionSpeciale = getNomFonctionSpecialeDepuisLeXML(); // ici je récupère un String qui vaut "maMethodeMachin"
Actuellement j'utilise un artifice dans le premier fichierCode:unMachin[nomFonctionSpeciale] = maMethodeMachin;
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.Code:
1
2
3
4
5
6
7
8 // FICHIER 1 function getMethode(unNomDeMethode){ switch (unNomDeMethode){ case "maMethodeTruc": return maMethodeTruc; case "maMethodeBidule": return maMethodeBidule; ... } }
Je cherche quelque chose comme
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....Code:unMachin[nomFonctionSpeciale] = FaisLeLienVers(maMethodeMachin);
Merci pour votre aide,
bon code,
kerinel