Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Equivalent of "window["functionName"](arguments)" in server-side

If you need such a capability within a module, one hack is to store such module functions in variables within the module and then call them by accessing them from the module object properties. Example:

var x = { }; // better would be to have module create an object
x.f1 = function()
{
    console.log('Call me as a string!');
}

Now, within the module, you can call it using the value from a string:

var funcstr = "f1";
x[funcstr]();

I am learning the ropes with Node myself, the above is probably all sorts of wrong :-). Perhaps a marginally better way to write this example would be (for the module m.js):

module.exports =
{
    f1: function() { console.log("Call me from a string!"); },
    f2: function(str1) { this[str1](); }
}

Now you can:

var m = require('m.js');
m.f2('f1');

Or even just:

var m = require('m.js');
m['f1']();

FWIW!


you're looking for global

Note, however, that in modules nothing is ever exposed to this level


1) If methods are in same js file

define all methods as properties of Handler:

var Handler={};

Handler.application_run = function (name) {
console.log(name)
}

Now call it like this

var somefunc = "application_run";
Handler[somefunc]('jerry codes');

Output: jerry codes


2) If you want to keep methods in a different js file

//    Handler.js
module.exports={
    application_run: function (name) {
        console.log(name)
    }
}

Use method defined in Handler.js in different.js:

//    different.js
var methods = require('./Handler.js')   // path to Handler.js
methods['application_run']('jerry codes')

Output: jerry codes


If you want to call a class level function using this then following is the solution and it worked for me

class Hello {
  sayHello(name) {
    console.log("Hello " + name)
  }
  callVariableMethod() {
    let method_name = 'sayHello'
    this[`${method_name}`]("Zeal Nagar!")
  }
}