Javascript dynamically invoke object method from string
72,258
Solution 1
if the name of the property is stored in a variable, use []
foo[method]();
Solution 2
Properties of objects can be accessed through the array notation:
var method = "smile";
foo[method](); // will execute the method "smile"
Solution 3
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
method can be call with eval
eval("foo." + method + "()");
might not be very good way.
Solution 5
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;
}
};
Related videos on Youtube
Author by
Mikulas Dite
Updated on July 08, 2022Comments
-
Mikulas Dite almost 2 years
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();
-
stackdave over 6 yearsit's not working for me using a variable inside a function:const genericResolver = ( table, action , values ) => { return Auth.isAuthenticated() .then(() => { return eval(table).findAll()
-
Phil Cooper over 5 yearsIt's always helpful to provide some commentary with your code so it can be understood out of context.
-
s.n over 5 yearsAdded some comment. Thanks!
-
schlingel over 5 yearsIf you want to execute a method from another method inside a class, use this['methodName']().
-
Anand Rockzz almost 5 yearsGetting this ugly error
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'FooClass'
anyone else ? -
Rorrim about 4 yearsUseful in my case where
foo
is{ fields: [{ id: 1 }] }
andmethod
isfields[0]?.id
, but I had to remove()
from your proposed answer -
YTG about 2 yearsI just love short answers.