Javascript 如何避免将空参数传递给具有多个可选参数的函数?
我有一个函数,看起来像这样:Javascript 如何避免将空参数传递给具有多个可选参数的函数?,javascript,function,web,Javascript,Function,Web,我有一个函数,看起来像这样: function f(requiredParamA, requiredParamB, optionalObjectParamA, optionalObjectParamB) { optionalObjectParamA = optionalObjectParamA || {}; optionalObjectParamB = optionalObjectParamB || {}; // rest of the function } 假设我想
function f(requiredParamA, requiredParamB, optionalObjectParamA, optionalObjectParamB) {
optionalObjectParamA = optionalObjectParamA || {};
optionalObjectParamB = optionalObjectParamB || {};
// rest of the function
}
假设我想调用f
,调用值为optionalObjectParamB
,而不是optionalObjectParamA
。我可以这样做:
f("john", 100, null, {vegatarian: true});
但这会导致一个丑陋的API。
还有其他选择吗?我应该如何设计函数以及如何调用它?传递对象而不是参数。然后,您可以拥有无限的可选参数,而无需放大参数列表
function f(requiredParamA, requiredParamB, context) {
var optional = context || {};
// handle optional.optionalObjectParamA..
// handle optional.optionalObjectParamB..
}
如果oA需要一个数字,而oB需要一个字符串,那么如果oB未定义,您可以嗅探oA的参数类型,这将让您决定是将该值重新指定为oB还是保留为oA。您可以对任何类型或对象使用一个冒烟的属性/值,一个期望值,另一个不期望值。您也可以使用选项对象参数,就像jquery的ajax一样,只需填写您需要调整的属性。是的,这样可以方便地拥有一个“默认”对象,它具有未指定的所有选项设置,如
options=$.extend({},默认值,options)
,或类似的设置。我会更进一步,使所有参数成为options对象的一部分,如果缺少,则抛出错误。