我在 JavaScript 中有一个函数的名称作为字符串。如何将其转换为函数指针,以便稍后调用?
根据情况,我可能还需要将各种参数传递给方法。
某些函数可能采用 namespace.namespace.function(args[...])
的形式。
最佳答案
不要使用 eval
,除非你绝对肯定别无选择。
如前所述,使用这样的方法是最好的方法:
window["functionName"](arguments);
但是,这不适用于命名空间的函数:
window["My.Namespace.functionName"](arguments); // fail
你会这样做:
window["My"]["Namespace"]["functionName"](arguments); // succeeds
为了使这更容易并提供一些灵 active ,这里有一个方便的功能:
function executeFunctionByName(functionName, context /*, args */) {
var args = Array.prototype.slice.call(arguments, 2);
var namespaces = functionName.split(".");
var func = namespaces.pop();
for(var i = 0; i < namespaces.length; i++) {
context = context[namespaces[i]];
}
return context[func].apply(context, args);
}
你可以这样调用它:
executeFunctionByName("My.Namespace.functionName", window, arguments);
注意,你可以在任何你想要的上下文中传递,所以这和上面的一样:
executeFunctionByName("Namespace.functionName", My, arguments);
关于javascript - 当我将其名称作为字符串时如何执行 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/359788/