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

Javascriptnode.js

Javascript Problem Overview


What is the equivalent code of window["functionName"](arguments) in NodeJS server-side?

Javascript Solutions


Solution 1 - Javascript

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!

Solution 2 - Javascript

you're looking for global

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

Solution 3 - Javascript

  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


  1. 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

Solution 4 - Javascript

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!")
  }
}

Solution 5 - Javascript

If You need it in module scope, You can use something like this

var module = require('moduleName');

module['functionName'](arguments);

Solution 6 - Javascript

Honestly, looking at all these answers they seem a bit too much work. I was playing around to look for other ways around this. You can use the eval() command to print a variable as text then call it as a function

I.e

let commands = ['add', 'remove', 'test'];
for (i in commands) {
    if (commands[i] == command) {
        var c = "proxy_"+command;
        eval(c)(proxy);
    }
}

eval(string)(arg1, arg2);

This example script would execute the function proxy_test(proxy)

Solution 7 - Javascript

You know, the OP's code inspired me to try this:

global.test = function(inVal){
    console.log(inVal);
}

global['test']('3 is the value')

But now that I think about it, it's no better than @Ravi' s answer.

Solution 8 - Javascript

I use this for node, see if this approach works for you

var _ = require('lodash');
var fnA1 = require('functions/fnA1');
var fnA2 = require('functions/fnA2');

module.exports = {
    run: function(fnName, options, callback) { 
        'use strict';
        var nameSpace = fnName.toString().split('.');
        // if function name contains namespace, resolve that first before calling
        if (nameSpace.length > 1) {
            var resolvedFnName = this;
            _.forEach(nameSpace, function(name){
                resolvedFnName = resolvedFnName[name];
            });
            resolvedFnName(options, callback);
        } else {
            this[fnName](options, callback);
        }
    },
    fnA1: fnA1,
    fnA2: fnA2
};

call this like

importVariable.run('fnA1.subfunction', data, function(err, result){
    if (err) {return callback(err);}
    return callback(null, result);
});

Solution 9 - Javascript

That is not specific to the window object. In JavaScript any property of the object can be accessed this way. For example,

var test = {
    prop1 : true
};

console.log(test.prop1); // true
console.log(test["prop1"]); // also true

Read more here : https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects

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
QuestionparsView Question on Stackoverflow
Solution 1 - JavascriptraviView Answer on Stackoverflow
Solution 2 - JavascriptNoneView Answer on Stackoverflow
Solution 3 - JavascriptGorvGoylView Answer on Stackoverflow
Solution 4 - JavascriptZeal NagarView Answer on Stackoverflow
Solution 5 - JavascriptArtur MirończukView Answer on Stackoverflow
Solution 6 - Javascriptuser8979341View Answer on Stackoverflow
Solution 7 - Javascriptalfadog67View Answer on Stackoverflow
Solution 8 - JavascriptbalyanrobinView Answer on Stackoverflow
Solution 9 - JavascriptpradeekView Answer on Stackoverflow