Javascript dynamically invoke object method from string

JavascriptOopDynamicMethodsInvoke

Javascript Problem Overview


Can I dynamically call an object method having the method name as a string? I would imagine it like this:

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();

Javascript Solutions


Solution 1 - Javascript

if the name of the property is stored in a variable, use []

foo[method]();

Solution 2 - Javascript

Properties of objects can be accessed through the array notation:

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

Solution 3 - Javascript

When we call a function inside an object, we need provide the name of the function as a String.

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

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

Solution 4 - Javascript

method can be call with eval eval("foo." + method + "()"); might not be very good way.

Solution 5 - Javascript

I would like to leave an example here for this. For example; i want to call a dynamically check method while submitting the form.

<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;
    }
};

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMikulas DiteView Question on Stackoverflow
Solution 1 - JavascriptKaroly HorvathView Answer on Stackoverflow
Solution 2 - JavascriptDidier GhysView Answer on Stackoverflow
Solution 3 - Javascripts.nView Answer on Stackoverflow
Solution 4 - JavascripthakovalaView Answer on Stackoverflow
Solution 5 - JavascriptahmetiView Answer on Stackoverflow