如何组合类似的函数-Javascript
我有两个非常相似的功能,如果可能的话,我想将它们结合起来。我唯一的问题是一个函数接受2个参数,另一个函数接受3个参数。有没有办法做到这一点,或者这两个功能必须通过设计保持分离如何组合类似的函数-Javascript,javascript,Javascript,我有两个非常相似的功能,如果可能的话,我想将它们结合起来。我唯一的问题是一个函数接受2个参数,另一个函数接受3个参数。有没有办法做到这一点,或者这两个功能必须通过设计保持分离 function getClientData(id, command) { var formData = { 'method': command, 'id': id }; getEntityData(formData); } function getLocat
function getClientData(id, command) {
var formData = {
'method': command,
'id': id
};
getEntityData(formData);
}
function getLocation(id, clientid, command) {
var formData = {
'method': command,
'locationid': id,
'clientbrandid': clientid
};
getEntityData(formData);
}
更新
function getEntityData(data) {
var url = '/../admin/miscellaneous/components/global.cfc?wsdl';
var ajaxResponse = $.ajax({
url: url,
dataType: 'json',
data: data,
global: false,
async:false,
cache: false,
success: function(apiResponse){
return apiResponse;
}
}).responseJSON;
var response = ajaxResponse[0];
for (var i in response) {
if (response.hasOwnProperty(i)){
$("#edit"+i).val(response[i].trim());
}
}
}
也许是更合理的论点顺序:
function getLocation(id, command, clientid) {
var formData = {
'method': command,
'locationid': id
};
if (clientid) {
formData['clientbrandid'] = clientid;
}
getEntityData(formData);
}
// With
getLocation(1, 'doStuff', 2);
// Without
getLocation(1, 'doStuff');
如果locationid
和id
不同:
function getLocation(id, command, clientid) {
if (clientid) {
var formData = {
'method': command,
'locationid': id,
'clientbrandid': clientid
};
} else {
var formData = {
'method': command,
'id': id,
};
}
getEntityData(formData);
}
// With
getLocation(1, 'doStuff', 2);
// Without
getLocation(1, 'doStuff');
是的,您可以,我宁愿不传递每个参数,而是传递一个js对象,并决定它包含哪些参数,例如:
function getLocation(options) {
getEntityData(options);
}
你的电话应该是:
getLocation({'method': command,'id': id})
更新
function getEntityData(data) {
var url = '/../admin/miscellaneous/components/global.cfc?wsdl';
var ajaxResponse = $.ajax({
url: url,
dataType: 'json',
data: data,
global: false,
async:false,
cache: false,
success: function(apiResponse){
return apiResponse;
}
}).responseJSON;
var response = ajaxResponse[0];
for (var i in response) {
if (response.hasOwnProperty(i)){
$("#edit"+i).val(response[i].trim());
}
}
}
或者您可以避免使用getLocation函数,只调用getEntityData
getEntityData({
'method': command,
'id': id
});
我想这取决于你的论点,但这也是一个解决方案。(假设客户端id是一个对象) 我同意:
function getWhatever(id, command, clientId) {
var formData = { method: command };
if (typeof clientId === 'undefined') {
formData.id = id;
} else {
formData.locationid = id;
formData.clientbrandid = clientId;
}
getEntityData(formData);
}
这看起来棒极了。我会试试看,让你知道!!在这一点上,拥有
getLocation
函数是没有用的,不是吗?他可以直接调用getEntityData
,这也是我的想法@ColinDeClue。感谢您的更新:)请注意,如果您是在一个现有的代码库中执行此操作,并且该代码库积极地使用这些函数,那么函数签名(参数的顺序是不同的)。您需要重构现有代码。最好将可选参数设置为最后一个,这样就不需要删除它。这不应该是'clientbrandid':\u clientid
?否则它只是一个未使用的变量,对吗?实际上您有4个参数,id和locationid以不同的名称传递给getEntityData。它们是一样的吗?您尚未显示getEntityData的功能。我将立即更新。getEntityData只是一个ajax函数,它接受data:
部分中的数据。
function getWhatever(id, command, clientId) {
var formData = { method: command };
if (typeof clientId === 'undefined') {
formData.id = id;
} else {
formData.locationid = id;
formData.clientbrandid = clientId;
}
getEntityData(formData);
}