假设我有一个类似于以下的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', response)
?
在这种情况下,当redirectUri
设置为http://localhost
时,code
是否设置为response
?为了确保设置正确的参数,我是否需要使用undefined
调用函数来获取我不需要的参数?示例:setCookie(http://localhost', undefined, undefined, response);
?
由于
答案 0 :(得分:1)
您基本上寻找的是function overloading,但JavaScript本身不支持。
以下是您的选择:
将参数作为单个对象。
SELECT Name FROM tax WHERE Name regexp('21%')
如果您可以使用ES6,则Object Destructuring会更容易:
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
});
或者使用arguments
对象的长度并检查支持的用法:
function setCookies({ redirectUri, response, profile, code }) {
// Check the variable and do your stuff
}
您还可以通过检查变量类型进行更智能的猜测。
答案 1 :(得分:0)
只需在方法签名中首先订购您需要的参数。
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);