【发布时间】:2013-10-17 23:23:56
【问题描述】:
假设我有一个如下的 javascript 函数:
myFunction: function(data, callback){
//Do stuff
}
假设我现在想为这个函数添加另一个参数。让我们打电话给flag。我也不想到处更改函数调用。在我看来,大多数 javascript 函数都将它们的回调作为最后一个参数。这是否意味着我应该像这样改变函数:
myFunction: function(data, flag, callback){
//Do stuff
}
或者像这样改变它更好:
myFunction: function(data, callback, flag){
//Do stuff
}
第一种方法允许回调在最后,但如果我走这条路线,我需要添加一些东西来处理所有将回调作为第二个参数传回的旧调用。比如:
if (_.isFunction(flag)) {
onComplete = flag;
return retAll = false;
}
第二种方法看起来有点奇怪,需要我做这样的事情来处理不包含第三个参数的旧调用:
if (flag == null) {
flag = false;
}
在这种情况下,是否有一种普遍接受的方式来处理参数的顺序?另外,我是否应该只跟踪对函数的所有调用并更改传入的参数而不是在函数本身中处理它?
【问题讨论】:
-
should I just track down all calls to the function and change what parameters are being passed in instead of handling it in the function itself?- 我会这样做。我认为更好的做法是让它接受一个参数 - 一个对象。然后检查属性是否存在(如果缺少必需的则抛出错误) -
当您想要保持这种向后兼容性时,进行类型检查是一般模式。如果您要更新其中许多方法,您可能希望使用路由器来处理最后 2 个参数
-
更好?这就是价值判断。我会更改您的所有函数以采用作为对象的单个参数。然后,您可以为
data和flag和callback创建属性,以及您想要的任何其他内容。那你就再也不会遇到这种情况了……当然,就预期而言,它也会相当不透明。 -
@Mike-McCauhan - 我是这种方法的忠实拥护者,我在下面的回答有一个基本相同的修改。
标签: javascript