我有一个这样的功能(简化):
doSmthg (name,age,callback) {
callback(name,age);
}
如果没有提供,我希望有一个年龄的默认值.
我知道我可以在ES6中做doSmthg(name,callback,age = 42){…},但是我已经被告知回调应该始终是最后一个参数,因为它使函数的调用更易读.
现在我找到的解决办法是做以下事情:
doSmthg (name,callback) {
if (arguments.length === 2) {
age = 42;
callback = age;
}
}
但是我觉得这个解决方案很难阅读.
这是很好的解决方案吗?有更好的一个吗?
解决方法
对于这种情况,你可以使用这样的东西:
function doSmthg(name,callback) {
if (typeof age === 'function') {
callback = age;
age = DEFAULT_VALUE;
}
//continue
}
或者您可以使用Hash的选项,我认为这更好,因为使代码更可读,具体取决于参数数量:
function doSmthg(options,callback) {
var name = options.name;
var age = options.age || DEFAULT_VALUE;
//continue
}
doSmthg({ name: 'batman' },function() {});
您也可以使用underscore #extend function将选项与默认值合并.