Contenido

Parámetros por defecto en funciones Javascript

28 Sep

+ 7

Una de las propiedades de PHP que más me gustan es la posibilidad de especificar un valor por defecto a los parámetros que pasamos a un función.

function miFuncion(param = "uno", param2="dos"){
...
}
// Ejemplo
miFuncion();

De esta forma definimos un valor para los parámetros que en caso de no ser definidos será cargados inicialmente con dichos valores.

Javascript es un lenguaje que no permite especificar el valor de estos parámetros por defecto, pero el ingenio y la imaginación permite que grandes mentes puedan superar estas dificultades.

Function.prototype.defaults = function()
{
  var _f = this;
  var _a = Array(_f.length-arguments.length).concat(
    Array.prototype.slice.apply(arguments));
  return function()
  {
    return _f.apply(_f, Array.prototype.slice.apply(arguments).concat(
      _a.slice(arguments.length, _a.length)));
  }
}

Extendiendo el elemento Function nos evitamos tener que controlar en el interior de nuestra función los parámetros que recibimos:

function foo(a, b)
{
  a = typeof(a) != 'undefined' ? a : 42;
  b = typeof(b) != 'undefined' ? b : 'default_b';
  ...
}

Al haber extendido la función, ahora disponemos de un sistema con el que podemos definir los valores por defecto de los parámetros.

var foo = function(a, b)
{
  ...
}.defaults(42, 'default_b');

En este ejemplo, vemos como definimos por defecto los valores 42 para el parámetro a y ‘default_b’ para el parámetro b.

Prefiero:

function foo(a, b)
{
  a = a || 42;
  b = b || 'default_b';
  ...
}

Me gusta más como queda y como trabaja así.

Saludos!

Excelente, sou desenvolvedor web e apaixonado por javascript, seu blog até hoje só trouxe coisas interessantes e úteis!
Parabéns pelo trabalho!

Prefiero la propuesta de The Doctor:


function foo(a, b)
{
  a = a || 42;
  b = b || 'default_b';
  ...
}

@Jose: A mi también me gusta más :D
Aunque nunca viene de más conocer alternativas al mismo problema.

La propuesta de The Doctor es mas eficiente, yo al menos la uso aunque reconozco que la propuesta expuesta aqui puede resultar más elegante y comoda al no tener que escribir en el codigo los OR

Yo me quedo con la propuesta de Andrés.

Con la de Doctor, un valor pasado como NULL devolvería 42 mientras que en la propuesta inicial devolería NULL.

La propuesta inicial hila más fino y solo devolvería el valor por defecto cuando la variable no se hubiera definido. Esto nos permite manipular el caso del NULL si lo deseamos.

He colgado ejemplos completos en mi blog http://programadorphp.es

Me quedo con la A sin dejar de reconocerle el merito a la B ;-)
Saludos a todos,

Vicent

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.


Cerrar
Enviar por Correo