名称作为字符串时如何执行JavaScript函数

我有一个JavaScript函数的名称作为字符串。如何将其转换为函数指针,以便以后可以调用?

根据情况,我可能还需要将各种参数传递给该方法。

某些功能可能采用的形式namespace.namespace.function(args[...])

回答:

eval除非您 绝对 没有其他选择 否则不要使用。

如前所述,使用这种方法将是最好的方法:

window["functionName"](arguments);

但是,这将不适用于名称空间的功能:

window["My.Namespace.functionName"](arguments); // fail

您将按照以下方式进行操作:

window["My"]["Namespace"]["functionName"](arguments); // succeeds

为了使操作更简单并提供一些灵活性,这里提供了一个便捷功能:

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函数 的全部内容, 来源链接: utcz.com/qa/408185.html

回到顶部