如何在Javascript中传递一个字符串或函数名列表作为回调处理

How can I pass a string, or list of function names to be processed as callbacks in Javascript

本文关键字:函数 字符串 列表 处理 回调 一个 Javascript      更新时间:2023-09-26

做了一些谷歌搜索,但没有找到我想要的。

为了减少应用程序所需的JAvascript行的数量,我正在尝试使用尽可能多的可重用函数。

当然,问题在于尽可能地使这些功能和灵活性。

因此,我有一个使用jQuery的克隆函数动态扩展的表单。为了实现这一点,需要运行一些额外的函数,例如,在动态创建的元素上正确初始化日期选择器。

这些要求因要克隆的表单而异。

因此,我将我的克隆函数称为:

$('.button').click(function (){
    var thisID = $(this).attr('id').replace('add', '');
    cloneDetails(thisID, initialiseDates);
});

cloneDetails函数如下所示:

function cloneDetails(cur_num, callBackFunctions) {
  /// do loads of stuff ///
 callBackFunctions();
});

在这种情况下,克隆函数将运行并执行它需要的操作,然后它将运行第二个函数initialiseDates

不过,我想做的是指定几个函数名,以便在克隆函数之后运行,并使用诸如之类的调用

cloneDetails(thisID, 'initialiseDates, doSomethingElse, doAnotherThing');

因此,声明cloneDetails函数运行后要运行的函数列表。

我认为我没有正确设置回调方法,也不知道我应该如何设置。

非常感谢您的帮助。

编辑:我不想把所有这些函数捆绑成一个函数,重点是这些函数都应该可以单独使用和/或一起使用。

我能想到几种方法:

  1. 您可以拆分字符串,并在列表中的每个名称中使用eval(name+'()')。请注意,eval()可能是邪恶的、安全的。

  2. 为什么不将函数作为数组传递呢?只需迭代arguments[1..n]arguments是一个包含所有函数参数的自动变量)。

  3. 使用匿名函数:

    cloneDetails(thisID, function(){
        initialiseDates();
        doSomethingElse();
        doAnotherThing();
    });
    

我喜欢最后一种方法,因为:

  1. 它是最灵活的
  2. 可读
  3. 只在需要的地方添加几个字节的代码
  4. 最具性能

另一个选项(如果您使用的是jQuery>1.7):您可以使用jQuery.Callbacks函数。

cloneDetails(thisID, $.Callbacks()
    .add(initialiseDates, doSomethingElse, doAnotherThing));
function cloneDetails(cur_num, callBackFunctions) {
  /// do loads of stuff ///
  callBackFunctions.fire();
});