Javascript 相当于;窗口[“函数名”](参数)";在服务器端
NodeJS服务器端的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 阅读此处的更多信息:如果您需要模块
窗口[“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!")
}
}