Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何避免将空参数传递给具有多个可选参数的函数?_Javascript_Function_Web - Fatal编程技术网

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对象的一部分,如果缺少,则抛出错误。