当前位置: 首页 > 面试题库 >

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

姚才捷
2023-03-14
问题内容

我有一个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中将变量名作为字符串获取?喜欢 我想这样做: 更新 我正在尝试使用JavaScript连接浏览器和另一个程序。我想将实例名称从浏览器发送到另一个程序以用作回调方法: 从另一个程序: 问题答案: 通常,在需要将名称映射到某个值并能够同时检索两者的情况下,可以使用哈希表。

  • 问题内容: 例如,如果我有一个像这样的函数 我希望能够将字符串或输入转换为直接指向该函数,例如 要么 有什么方法可以使用w来引用函数add吗? 问题答案: 由于要接受用户输入,因此最安全的方法是准确定义有效输入: 如果要评估像这样的字符串,则可以使用安全的eval: 通常,将其应用于用户输入时可能会很危险。 由于 已禁用, 并且限制为,因此上述方法更安全 。比我聪明的人可能仍然会造成麻烦,但是我无

  • 问题内容: 在Python中,如何在不调用函数的情况下以字符串形式获取函数名称? 应该输出。 此类功能在Python中可用吗?如果没有,关于如何在Python中实现的任何想法? 问题答案: 使用是首选的方法,因为它可以统一应用。与不同func_name,它还可以用于内置函数: 同样,双下划线向读者表明这是一个特殊的属性。另外,类和模块也具有属性,因此你只记得一个特殊名称。

  • 本文向大家介绍如何在Python中获取变量名称作为字符串?,包括了如何在Python中获取变量名称作为字符串?的使用技巧和注意事项,需要的朋友参考一下 实际上,这不是您在Python中所做的事情,因为变量实际上是对象的名称映射。Python中唯一具有规范名称的对象是模块,函数和类,并且在定义函数或类或导入模块后,当然不能保证此规范名称在任何命名空间中都具有任何含义。这些名称也可以在创建对象之后进行

  • 从java中字符串的值创建对现有对象的引用 在我的项目中,有很多按钮(目前大约70个);每个按钮都会在数据库的jlabel中提出一个问题。现在,根据用户的选择,每个按钮(swings的jButton)将被分配颜色,这取决于用户是否想查看问题,或者他是否标记了问题的答案。 一种方法是为每个jbutton的actionperformed编码,并在每个jbutton中使用if-else来获得确切的颜色,

  • 我想对字符串执行子字符串操作。我有字符串<代码> 我尝试了finame=mainname。子字符串(0,mainname.lastIndexOf(“.”) 但我得到了<代码>