Jump to content

Running a Method That Is Stored In a Variable


Spr243

Recommended Posts

How can I run a method stored in a variable?

For example, there is a dropdown of available methods and the selects a method that the user wants it to complete. That method is stored in the variable, userSelectedMethod. For the example, that method would be toUpperCase().

var userSelectedMethod = "toUpperCase()"

I want the script to run the method that is in the variable and apply it to the enteredText variable.

I tried using the following code. (Didn't work, obviously)

/// Attempt 1
var newResult = enteredText.userSelectedMethod;
/// Attempt 2
var newResult = enteredText.Module[userSelectedMethod];
/// Attempt 3
var newResult = enteredText.callback(userSelectedMethod);

I want the newResult to run whatever method the user's selected method is. What would be the proper and simplest method of accomplishing this?

Note: The variable names and extra steps that I had in my project, from which this question arose, have been removed and simplified to explain what I'm trying to do.

Edited by Spr243
Clarification
Link to comment
Share on other sites

The safest way is to decide a list of permitted methods, and then use a switch() statement to choose which one you want to run:

var newResult;
switch(userSelectedMethod) {
  case "toUpperCase()":
    newResult = enteredText.toUpperCase();
    break;
  case "toLowerCase()":
    newResult = enteredText.toLowerCase();
    break;
  default:
    newResult = enteredText;
}

If you tried to generalize further than that, it's likely that the user will break something by putting invalid methods or something that could alter the control of your program.

Link to comment
Share on other sites

39 minutes ago, Ingolme said:

The safest way is to decide a list of permitted methods, and then use a switch() statement to choose which one you want to run:


var newResult;
switch(userSelectedMethod) {
  case "toUpperCase()":
    newResult = enteredText.toUpperCase();
    break;
  case "toLowerCase()":
    newResult = enteredText.toLowerCase();
    break;
  default:
    newResult = enteredText;
}

If you tried to generalize further than that, it's likely that the user will break something by putting invalid methods or something that could alter the control of your program.

Thank you for your response. My actual intended use is for programming a bot in Discord, but I figured the general principle would be the same. I will be aware of the potential security implications, but this bot is private and limited in its use to trusted people. Ignoring security issues, what would be the way to do what I mentioned in my original post, as making switch statements for each would take tremendous amounts of effort for the goal I am trying to achieve.

Link to comment
Share on other sites

The more general solution would be to have a string containing the name of the method and use the square brackets notation to access it.

var methodName = "toUpperCase";
var str = "Hello World!";
var result = str[methodName]();

This solution only works with methods that don't take arguments, of course.

  • Thanks 1
Link to comment
Share on other sites

13 hours ago, Ingolme said:

The more general solution would be to have a string containing the name of the method and use the square brackets notation to access it.


var methodName = "toUpperCase";
var str = "Hello World!";
var result = str[methodName]();

This solution only works with methods that don't take arguments, of course.

Thank you again for your response. I really appreciate it. 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...