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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
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 ...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
unMachin[nomFonctionSpeciale] = maMethodeMachin;
Actuellement j'utilise un artifice dans le premier fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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