Javascript 让一个函数根据它接收的参数执行不同的逻辑
假设我有一个类似于以下内容的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
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]);
}
}
您还可以通过检查变量类型进行更智能的猜测。是,或者您可以对参数重新排序,使响应为第二,这样您就不需要将未定义的传递给其他参数。