Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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 - Fatal编程技术网

Javascript 让一个函数根据它接收的参数执行不同的逻辑

Javascript 让一个函数根据它接收的参数执行不同的逻辑,javascript,Javascript,假设我有一个类似于以下内容的JavaScript函数: setCookies: function (redirectUri, code, profile, response) { var serviceRedirect = settings.getServiceUrl(), state = code ? code : uuid.new(), redirectCookie = profile ? redirectUri + '?profile=' + pro

假设我有一个类似于以下内容的JavaScript函数:

setCookies: function (redirectUri, code, profile, response) {
    var serviceRedirect = settings.getServiceUrl(),
        state = code ? code : uuid.new(),
        redirectCookie = profile ? redirectUri + '?profile=' + profile : redirectUri;

    cookies.set(names.state, state, response.config);
    cookies.set(names.redirectUri, redirectCookie, response.config);
}
由于这些值取决于传入的正确参数,我如何防止有人调用此函数,如:
setCookies('http://localhost,响应)

在这种情况下,
redirectUri
不会被设置为
http://localhost
代码
被设置为
响应
?为了确保设置了正确的参数,是否需要对不需要的参数调用
undefined
函数?示例:
setCookie(http://localhost,未定义,未定义,响应)


谢谢

只需订购方法签名中首先需要的参数即可

function setCookies(redirectUri, response, code, profile) {
    var serviceRedirect = settings.getServiceUrl(),
    state = code ? code : uuid.new(),
    redirectCookie = profile ? redirectUri + '?profile=' + profile : redirectUri;

    cookies.set(names.state, state, response.config);
    cookies.set(names.redirectUri, redirectCookie, response.config);
}

setCookies('https://test.com', response);

基本上,您需要的是,但是JavaScript在本机上不支持这一点

以下是您的选择:

将参数作为单个对象

function setCookies(args) {
  var redirectUri = args.redirectUri;
  var response = args.response;
  // ... and so on.
}

// and call it like:

setCookies({
  redirectUri: 'https://some.com',
  response: response
});
如果您可以使用ES6,这将更容易:

function setCookies({ redirectUri, response, profile, code }) {
  // Check the variable and do your stuff
}
或者使用对象的长度并检查支持的用法:

function setCookies() {
  switch (arguments.length) {
    case 2:
      return setCookiesWithJustUriAndResponse(arguments[0], arguments[1]);
    case 4:
      return otherSetCookies(arguments[0], arguments[1], arguments[2], arguments[3]);
  }
}

您还可以通过检查变量类型进行更智能的猜测。

是,或者您可以对参数重新排序,使响应为第二,这样您就不需要将未定义的传递给其他参数。