Javascript 相当于;窗口[“函数名”](参数)";在服务器端

Javascript 相当于;窗口[“函数名”](参数)";在服务器端,javascript,node.js,Javascript,Node.js,NodeJS服务器端的窗口[“functionName”](参数)的等效代码是什么?您正在查找的全局 但是,请注意,在模块中,没有任何对象不特定于窗口对象的对象暴露于此级别。在JavaScript中,对象的任何属性都可以通过这种方式访问。比如说, var test = { prop1 : true }; console.log(test.prop1); // true console.log(test["prop1"]); // also true 阅读此处的更多信息:如果您需要模块

NodeJS服务器端的
窗口[“functionName”](参数)
的等效代码是什么?

您正在查找的
全局


但是,请注意,在模块中,没有任何对象不特定于窗口对象的对象暴露于此级别。在JavaScript中,对象的任何属性都可以通过这种方式访问。比如说,

var test = {
    prop1 : true
};

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

阅读此处的更多信息:

如果您需要模块中的此类功能,一种方法是将此类模块函数存储在模块中的变量中,然后通过从模块对象属性访问它们来调用它们。例如:

var x = { }; // better would be to have module create an object
x.f1 = function()
{
    console.log('Call me as a string!');
}
现在,在模块中,您可以使用字符串中的值调用它:

var funcstr = "f1";
x[funcstr]();
我自己在学习绳结,上面可能有各种各样的错误:-)。也许编写此示例的更好方法是(对于模块m.js):

现在您可以:

var m = require('m.js');
m.f2('f1');
甚至只是:

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

FWIW

我将此用于节点,看看此方法是否适用于您

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
};
把这叫做

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

如果您在模块范围内需要它,您可以使用如下内容

var module = require('moduleName');

module['functionName'](arguments);
var somefunc = "application_run";
Handler[somefunc]('jerry codes');
1) 如果方法在同一个js文件中 将所有方法定义为处理程序的属性:

var Handler={};

Handler.application_run = function (name) {
console.log(name)
}
现在就这样说吧

var module = require('moduleName');

module['functionName'](arguments);
var somefunc = "application_run";
Handler[somefunc]('jerry codes');
输出:jerry代码


2) 如果您想在不同的js文件中保留方法 使用
different.js
Handler.js
中定义的方法:

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

输出:jerry codes

老实说,看看所有这些答案,它们似乎有点太多工作了。我一直在找别的办法来解决这个问题。您可以使用
eval()
命令将变量打印为文本,然后将其作为函数调用

eval(字符串)(arg1、arg2)


这个示例脚本将执行函数
proxy\u test(proxy)

您知道,OP的代码启发我尝试以下方法:

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

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

但是现在我想起来了,它并不比@Ravi的答案好。

如果你想用
这个
调用一个类级函数,那么下面是解决方案,它对我很有用

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

这似乎对我不起作用。它是否也适用于“调用函数”?
global['functionName'](…)
将在函数处于全局级别时起作用。但正如我所说的,模块不公开任何级别的内容,它们都封装在一个匿名作用域中。@MarkKahn,那么如何调用它们呢?是的。然而,我正在寻找一种通过名字来调用函数的方法。@事实上,你能告诉我你在寻找什么吗?这是一种更可持续、可维护和规范化的JS OO方法。谢谢。今天我不得不在一些难以抽象的代码中使用类似的东西。非常好,我只需要x[funcstr]();因为该方法是由其他插件添加的。优雅的解决方案。
class Hello {
  sayHello(name) {
    console.log("Hello " + name)
  }
  callVariableMethod() {
    let method_name = 'sayHello'
    this[`${method_name}`]("Zeal Nagar!")
  }
}