105 votes

Javascript invoque dynamiquement la méthode de l'objet à partir de la chaîne

Puis-je appeler dynamiquement une méthode objet ayant le nom de la méthode sous forme de chaîne ? Je l'imagine comme ça :

 var FooClass = function() {
    this.smile = function() {};
}

var method = "smile";
var foo = new FooClass();

// I want to run smile on the foo instance.
foo.{mysterious code}(); // being executed as foo.smile();

232voto

Karoly Horvath Points 45145

si le nom de la propriété est stocké dans une variable, utilisez []

 foo[method]();

35voto

Didier Ghys Points 17636

Les propriétés des objets sont accessibles via la notation de tableau :

 var method = "smile";
foo[method](); // will execute the method "smile"

6voto

s.n Points 148

Lorsque nous appelons une fonction à l'intérieur d'un objet, nous devons fournir le nom de la fonction sous forme de chaîne.

 var obj = {talk: function(){ console.log('Hi') }};

obj['talk'](); //prints "Hi"
obj[talk]()// Does not work

4voto

hakovala Points 65

la méthode peut être appelée avec eval eval("foo." + method + "()"); ce n'est peut-être pas un très bon moyen.

1voto

ahmeti Points 265

Je voudrais laisser un exemple ici pour cela. Par example; Je souhaite appeler une méthode de vérification dynamique lors de la soumission du formulaire.

 <form data-before-submit="MyObject.myMethod">
    <button type="submit">Submit</button>
</form>
 $('form').on('submit', function(e){

    var beforeSubmit = $(this).attr('data-before-submit');

    if( beforeSubmit ){

       params = beforeSubmit.split(".");
       objectName = params[0];
       methodName = params[1];

       result = window[objectName][methodName]($(this));

       if( result !== true ){
           e.preventDefault();
       }

    }

});

 var MyObject = {
    myMethod = function(form){
        console.log('worked');
        return true;
    }
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X