Javascript动态函数调用名称

所以我有以下伪Javascript代码:

var Class = (function(window, document, $) { function meth_1() { //some code } function meth_2() { //some code } function meth_3() { //some code } function meth_4() { //some code to call other three functions dynamically } Class = { meth_1: meth_1, meth_2: meth_2, meth_3: meth_3, meth_4: meth_4 }; return Class; })(window, document, jQuery); 

meth_4函数中,我想通过将函数名称作为字符串传递来动态调用其他3个函数。 我怎样才能做到这一点?!

在这个相关的StackOverflow问题中 ,答案提供了如何在窗口范围即window[function_name]()完成此操作的解决方案。 但是,我想知道如何在我的特殊情况下做到这一点。

谢谢。

编辑

我选择的答案可行。 您还可以执行以下操作:

 var Class = (function(window, document, $) { var meth_func = { meth_1: function(){/**your code**/}, meth_2: function(){/**your code**/}, meth_3: function(){/**your code**/} } function meth_4(func_name) { meth_func[func_name](); } Class = { meth_4: meth_4 }; return Class; })(window, document, jQuery); 

如果你想私有地动态调用这三个函数,这可能会更好。

由于您希望在对象范围而不是窗口范围内使用括号表示法调用函数,因此可以使用this代替window

 function meth_4() { this["meth_1"](); this["meth_2"](); this["meth_3"](); } 

我不知道为什么你会这么想(也””作为变量名称不好),但可以这样做:

 var Class = (function (window /*, ... */) { return { func1: function () {console.log('1')} , func2: function () {console.log('2')} , func3: function () {console.log('3')} , func4: function (funcName) { console.log('4+') this[funcName]() } } })(window) Class.func4('func3') 

这是一个可以做你想要的实现。 如果传递一个字符串,它将只查找相应的函数并执行它。 然而,由于JS中的函数是不受限制的对象,因此它们可以自我传递,并表明我已经将function扩展了一些与您要求的相比。 如果你传递一个函数(实际上只是一个字符串),它将(尝试)调用它

 meth_4 = function(fun){ if(typeof fun === 'string'){ this[fun](args.slice(1)); } else { //assuming it's a function if(arguments.length == 1) fun.call(this,[]) } else { fun.apply(this,arguments.slice(1)) } } } 

JavaScript对象是或者可以被视为键/值对集合。 任何函数或属性都可以以两种语义上等效的方式访问

obj.keyobj["key"]在某些情况下只能使用后者。 例如,如果属性被称为property name ,则不能执行obj.property name但可以执行obj["property name"]