包含函数反模式的对象中的参数太多?

在我的程序中,用户提供了一个数组,用于定义哪些函数在循环中运行。 我有一堆必须传递给每个函数的variables。 由于参数列表出现在很多地方,名单似乎一直在增长,并且变得难以维护。 这里是一些伪代码:

var fn_defs = { test_fn_1: function(test_var_1, test_var_2, test_var_3, test_var_4, test_var_5, cb){ //...do stuff }, test_fn_2: function(test_var_1, test_var_2, test_var_3, test_var_4, test_var_5, cb){ //...do stuff }, etc... }; async.eachSeries(user_defined_list_of_function_names, function(fn, async_cb){ var test_var_1, test_var_2, test_var_3, test_var_4, test_var_5; fn_defs[user_defined_list_of_function_names](test_var_1, test_var_2, test_var_3, test_var_4, test_var_5, function(result){ async_cb(); }, function(err){ //end }); }); 

寻找更好的方法来做到这一点。 我想我可以做全局variables,但我想这也是一个反模式。

这个模式(很多函数的参数)在javascript中很常见。 stream行的JavaScript库中的许多函数都需要大量的参数。 他们将这些参数包含在一个对象中,该对象将一个参数中的所有参数收集起来,并简化给出可选参数。

例如, JQuery UIanimation函数 ,它需要11个参数。 所有的参数都被封装在一个对象中。 传递缺less参数的对象将使用此参数的默认值。

 function dostuff(args){ var def_args = {step: 1, state: 'PENDING', vas: function(){}}; args = merge_options(def_args, args); } 

如果您使用的是内部接口,则可以使用DTO( http://en.wikipedia.org/wiki/Data_transfer_object )作为摘要,您可以创build一个简单对象来对所有variables进行分组。