Функции Javascript и необязательные аргументы
У меня есть две почти идентичные функции javascript, которые используются для запуска вызова jquery $ .get. Аргументы функции передаются вызываемому сценарию.
Проблема в том, что один набор вызовов требует дополнительного аргумента, а другой - нет.
Для этого я использую две почти идентичные функции javascript, о которых я упоминал. Они здесь:
function process(url, domid, domain, scan_id)
{
$.get(url,
{
domain: domain,
scan_id: scan_id
},
function(data)
{
$(domid).html(data);
});
}
function process_type(url, domid, type, domain, scan_id)
{
$.get(url,
{
domain: domain,
type: type,
scan_id: scan_id
},
function(data)
{
$(domid).html(data);
});
}
Как видите, вторая функция просто принимает дополнительный аргумент под названием «тип», который затем передается через вызов $ .get.
Я хочу объединить эти две функции, но я не уверен, как я могу дополнительно включить этот третий аргумент в этот (массив / объект / все, что он находится в {} (да, javascript noob)), который передается в $ .get.
РЕДАКТИРОВАТЬ, просто чтобы сказать .... черт возьми, вы, ребята, молодцы. : D
Ответов (3)3
Поскольку все, что вы делаете со всем, кроме url и domid, передаёт это объекту $.get
, почему бы не сделать это?
function process_type(url, domid, args) {
$.get(url, args, function(data) {
$(domid).html(data);
});
}
// call it without type
process_type('myurl', 'domid', {domain:'..', scanid:'...'});
// call it with type
process_type('myurl', 'domid', {type: '..', domain:'..', scanid:'..'});
Несколько простых способов сделать это
// 'b' is optional
// the 'null' value would be the default value
function Example1(a,b){
b = b || null;
// Some code here
}
function Example2(a,b){
if(typeof b == 'undefined') b = null;
// Some code here
}
function Example3(a,b){
if(b === undefined) b=null;
// Some code here
}
function Example4(a,b){
if(!b) b=null;
// Some code here
}
Для неограниченного количества аргументов вы можете использовать массив аргументов, например:
function ExampleArguments(){
for(var i=0; i<arguments.length; i++){
// Alert the current argument
alert(arguments[i]);
}
}
ExampleArguments('arg1',2,someVar);
все параметры в javascript являются необязательными, вы можете использовать массив параметров внутри функции для доступа к параметрам, переданным в обычном порядке следующим образом:
function myFunction(option1)
{
var option2 = arguments[1];
if(arguments[0] == option1)
alert("Happy Day, Option1 = " + option1 + ", Option2 = " + option2);
}
myFunction("Hello", "World");
Производит: Happy Day, Option1 = Hello, Option2 = World
Надеюсь, это иллюстрирует, как вы можете использовать массив аргументов для улучшения некоторого кода.
function process_type(url, domid, domain, scan_id)
{
var myOptions = {
domain: domain,
scan_id: scan_id
};
if(arguments[4])
myOptions["type"] = arguments[4];
$.get(url, myOptions,
function(data)
{
$(domid).html(data);
});
}
Затем вы можете вызвать его с последним параметром, являющимся типом, как необязательным, если параметр передан, он используется, если нет, он не указан.
Кроме того, поскольку фактический параметр является необязательным в первую очередь, вы также можете добавить имя в конец определения функции и использовать то же самое, если, но вместо того arguments[4]
, чтобы сделать if(type) myOptions["type"] = type;
function process_type(url, domid, domain, scan_id, type)
{
var myOptions = {
domain: domain,
scan_id: scan_id
};
if(type)
myOptions["type"] = type;
$.get(url, myOptions,
function(data)
{
$(domid).html(data);
});
}
Этот вызов будет включать тип
process_type("xxx", "xxx", "xxx", "xxx", "xxx");
где этот звонок не будет
process_type("xxx", "xxx", "xxx", "xxx");