valor una tipos retornar pasar parametros parametro otra opcionales opcional funciones funcion desde dentro anonimas javascript jquery arguments

tipos - retornar valor de una funcion javascript



Funciones Javascript y argumentos opcionales (3)

Tengo dos funciones javascript casi idénticas que se usan para iniciar una llamada jquery $ .get. Los argumentos para la función se pasan al script que se está llamando.

El problema es que un conjunto de llamadas requiere un argumento adicional que el otro no.

Para lograr esto estoy usando las dos funciones javascript casi idénticas que he mencionado. Aquí están:

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); }); }

Como puede ver, la segunda función simplemente acepta un argumento adicional llamado ''tipo'' que luego se pasa a través de la llamada $ .get.

Quiero combinar estas dos funciones, pero no estoy seguro de cómo puedo incluir opcionalmente ese tercer argumento en eso (matriz / objeto / lo que sea en {} (sí, javascript noob)) que se está pasando en $ .get.

EDITAR solo para decir ... maldición, ustedes son buenos. :RE


Algunas formas simples de hacerlo

// ''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 }

Para argumentos ilimitados puede usar la matriz ''argumentos'', ejemplo:

function ExampleArguments(){ for(var i=0; i<arguments.length; i++){ // Alert the current argument alert(arguments[i]); } } ExampleArguments(''arg1'',2,someVar);


Como todo lo que estás haciendo con todo menos url y domid es pasarlo al $.get , ¿por qué no haces esto?

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:''..''});


todos los parámetros en javascript son opcionales, puede usar los parámetros de matriz dentro de una función para acceder a los parámetros pasados ​​ordinariamente de la siguiente manera:

function myFunction(option1) { var option2 = arguments[1]; if(arguments[0] == option1) alert("Happy Day, Option1 = " + option1 + ", Option2 = " + option2); } myFunction("Hello", "World");

Produce: Happy Day, Option1 = Hello, Option2 = World

Esperemos que esto ilustre cómo puede usar la matriz de argumentos para mejorar algún código.

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); }); }

Luego puede llamarlo con el último parámetro que es del tipo opcional, si se pasa el parámetro se usa si no se omite.

Además, dado que el parámetro real es opcional en primer lugar, también puede agregar el nombre al final de la definición de la función y usar el mismo si, pero en lugar de arguments[4] lo haría 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); }); }

Esta llamada incluiría el tipo

process_type("xxx", "xxx", "xxx", "xxx", "xxx");

donde esta llamada no

process_type("xxx", "xxx", "xxx", "xxx");