有没有简单的方法来处理基于实体的参数?
在我的函数中,一切都取决于第二个参数或第三个参数是函数、对象等等。这是我的功能:
function fbAPI(endpoint, param1, param2, param3, param4) {
var type, params, success, error;
if(typeof param1 !== 'function' && typeof param2 !== 'function')
{
type = param1;
params = param2;
success = param3;
error = param4;
}
if(typeof param1 === 'function')
{
type = 'GET';
params = {};
success = param1;
error = param2;
}
if(typeof param1 === 'object')
{
type = 'GET';
params = param1;
success = param2;
error = param3;
}
if(typeof param1 !== 'function' && typeof param2 === 'function')
{
type = param1;
params = {};
success = param2;
error = param3;
}
FB.api(
endpoint,
type,
params,
function (response) {
if (response && !response.error) {
/* handle the result */
if(typeof success === 'function')
success(response);
}
if (response && response.error) {
console.log(response.error);
/* handle the result */
if(typeof error === 'function')
error(response);
}
}
);
}
有什么办法可以让它变得更短吗?
我应该可以这样调用我的函数:
this.api(_self.endPoints.friends, function (response) {
//do something
});
this.api(_self.endPoints.friends, function (response) {
//do something
},function (response) {
//do something
});
this.api(_self.endPoints.friends, 'GET', function (response) {
//do something
},function (response) {
//do something
});
this.api(_self.endPoints.friends, {data: data}, function (response) {
//do something
},function (response) {
//do something
});
this.api(_self.endPoints.friends, 'GET', {data: data}, function (response) {
//do something
},function (response) {
//do something
});
最佳答案
不要设计这种类型的函数签名。这是一场难以处理的噩梦,而且最终也会让您的用户感到困惑。您还会遇到奇怪的情况,其中 fbAPI(endpoint, 'GET', success, error)
失败,因为您没有想到在以下情况下默认 params
类型已给出。
如果您坚持这样做,那么如果您将参数视为一个数组,并将其从前面移开,那就更容易了:
function fbAPI(endpoint, ...args) {
var
type = typeof args[0] === 'string' ? args.shift() : 'GET',
params = typeof args[0] === 'object' ? args.shift() : {},
success = args.shift(),
error = args.shift();
关于javascript - javascript 中的可选参数或重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41484939/