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();
5 Answers 5
if the name of the property is stored in a variable, use []
foo[method]();
3 Comments
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'FooClass' anyone else ?Properties of objects can be accessed through the array notation:
var method = "smile";
foo[method](); // will execute the method "smile"
Comments
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
3 Comments
let talk = 'talk'; obj[talk]() // prints "Hi";method can be call with eval
eval("foo." + method + "()");
might not be very good way.
1 Comment
foo is { fields: [{ id: 1 }] } and method is fields[0]?.id, but I had to remove () from your proposed answerI 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;
}
};
Comments
Explore related questions
See similar questions with these tags.