如何在Javascript中传递一个字符串或函数名列表作为回调处理
How can I pass a string, or list of function names to be processed as callbacks in Javascript
做了一些谷歌搜索,但没有找到我想要的。
为了减少应用程序所需的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函数运行后要运行的函数列表。
我认为我没有正确设置回调方法,也不知道我应该如何设置。
非常感谢您的帮助。
编辑:我不想把所有这些函数捆绑成一个函数,重点是这些函数都应该可以单独使用和/或一起使用。
我能想到几种方法:
-
您可以拆分字符串,并在列表中的每个名称中使用
eval(name+'()')
。请注意,eval()
可能是邪恶的、安全的。 -
为什么不将函数作为数组传递呢?只需迭代
arguments[1..n]
(arguments
是一个包含所有函数参数的自动变量)。 -
使用匿名函数:
cloneDetails(thisID, function(){ initialiseDates(); doSomethingElse(); doAnotherThing(); });
我喜欢最后一种方法,因为:
- 它是最灵活的
- 可读
- 只在需要的地方添加几个字节的代码
- 最具性能
另一个选项(如果您使用的是jQuery>1.7):您可以使用jQuery.Callbacks函数。
cloneDetails(thisID, $.Callbacks()
.add(initialiseDates, doSomethingElse, doAnotherThing));
function cloneDetails(cur_num, callBackFunctions) {
/// do loads of stuff ///
callBackFunctions.fire();
});
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- JavaScript按钮/输入/函数,字符串反转
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- 从带参数的字符串变量调用函数中的函数
- 是否可以像字符串一样/操作/函数
- 从字符串调用javascript函数
- jquery字符串变量上的每个函数
- 如何在只接受字符串值/文字的HTML属性中调用函数
- 将JSON字符串转换为函数参数
- 在Javascript中将字符串转换为函数
- 正在创建使用子字符串解析JSON数据的函数
- 是否可以在 ng-click 中调用函数字符串
- 用于查找函数字符串 javascript 的正则表达式
- Regex js解析函数字符串
- 是传递给函数(字符串或对象)的元素
- 如何在不使用eval()的情况下将完整的函数字符串转换为javascript函数
- javascript函数字符串slice
- 引用函数(字符串)javascript中的数组项
- JS regex从一个函数字符串中提取多行参数