Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utiliser les méthodes dynamiquement

    23 octobre 2021 à 22:10:08

    Bonjour, comment puis-je faire ça simplement ? Je veux juste utiliser les méthodes contenues dans allPersos.(..), ici methodNames n'est pas itérables.
    var actualPerso = getPersoByName(selectPerso.value, allPersos);
        var targetPerso = getPersoByName(selectTarget.value, allPersos);
        var methodsNames = Object.getPrototypeOf(actualPerso);
        var propertyNames = Object.getOwnPropertyNames(actualPerso);
        if (!actualPerso || !targetPerso || !methodsNames || !propertyNames)
            return;
        
        var valueProperties = [];
    
        propertyNames.forEach( (propertyName) => {
            valueProperties.push(actualPerso[propertyName]);
        });
    
        for (var method of methodsNames){
            if (method.name === selectAttaque.value){
                actualPerso.method(targetPerso);
            }
        }
    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2021 à 12:02:29

      Salut, pour pouvoir faire une boucle, tu dois avoir un élément qui soit iterable, c'est à dire un tableau, un string. Un objet est iterable egalement mais via des méthodes spécifiques comme for...in par exemple .

      Ici la méthode get.PrototypeOf ne renvoie pas un tableau mais le type de prototype de l'objet, il n'est donc pas iterable.

      -
      Edité par NadfriJS 25 octobre 2021 à 12:03:25

      • Partager sur Facebook
      • Partager sur Twitter

      La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]

        25 octobre 2021 à 12:57:48

        NadfriJS a écrit:

        Salut, pour pouvoir faire une boucle, tu dois avoir un élément qui soit iterable, c'est à dire un tableau, un string. Un objet est iterable egalement mais via des méthodes spécifiques comme for...in par exemple .

        Ici la méthode get.PrototypeOf ne renvoie pas un tableau mais le type de prototype de l'objet, il n'est donc pas iterable.

        -
        Edité par NadfriJS il y a environ 1 heure


        Merci mais ça je l'avais compris.. Je cherche juste un moyen de faire ça ?
        • Partager sur Facebook
        • Partager sur Twitter
          27 octobre 2021 à 11:22:39

          Bonjour tu arrive déjà à récupéré la liste de noms de propriété de l'objet via:

          var propertyNames = Object.getOwnPropertyNames(actualPerso);
          
          Normalement lors du forEach tu as juste à vérifié si la valeur de la propriété et une fonction (propertyNames contient aussi le nom des propriétés qui contiennent des fonctions, donc des méthodes)

           Pour vérifié si une valeur et une fonction tu peut utilisé l'operateur instanceof sur l'objet natif Function

          var actualPerso = getPersoByName(selectPerso.value, allPersos);
          var targetPerso = getPersoByName(selectTarget.value, allPersos);
          // var methodsNames = Object.getPrototypeOf(actualPerso);
          var propertyNames = Object.getOwnPropertyNames(actualPerso);
          
          
          
          if (!actualPerso || !targetPerso || !methodsNames || !propertyNames)
              return;
          
          var valueProperties = [];
          var methods = [];
          
          propertyNames.forEach( (propertyName) => {
          	
          	const value = actualPerso[propertyName];
          
              valueProperties.push(value);
          	
              // si la valeur de la propriété une Fonction, la propriété et une méthode.
              if(value instanceof Function) {
              	methods.push(value);
              }
          });
          
          // for (var method of methodsNames){
          //    if (method.name === selectAttaque.value){
          //        actualPerso.method(targetPerso);
          //    }
          // }



          • Partager sur Facebook
          • Partager sur Twitter

          suggestion de présentation.

            2 novembre 2021 à 2:21:31

            Merci pour vos réponses, je n'avais pas vu.

            Aussi, je tiens à m'excuser car de toute évidence vous n'avez pas compris réellement ce que je voulais faire.

            Ce que je voudrais faire (si c'est possible):

            Dans le input j'ai: defaultAttaque -> c'est le nom de la méthode dans ma classe.

            Si ce nom existe dans

            getPrototypeOf

            Alors, exécuter la méthode qui lui est propre, mais tout ça dynamiquement sans faire par exemple:

            if (methodName === "defaultAttaque"){
                perso.defaultAttaque...
            }
            else if (.... )
            ..

            Merci

            -
            Edité par AlexisW09 2 novembre 2021 à 2:25:42

            • Partager sur Facebook
            • Partager sur Twitter

            Utiliser les méthodes dynamiquement

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown