Redefinir una función en Javascript

Introducción.

Estaba reutilizando un formulario complejo en un nuevo módulo de mi aplicación.  Todo iba bien hasta que descubrí que uno de los códigos Javascript que actualiza parte del formulario a través de AJAX no me era útil ya que debía mostrar una vista diferente a la estándar.   Como el código estaba escrito en funciones procedimentales no podía acceder a la sobreescritura de la orientación a objetos, sin embargo encontré un par de detalles interesantes de Javascript que me permitieron hacer algo similar.

Determinar existencia de funciones.

if(typeof miFuncion == 'function')
    // Si existe la función
else
    // No existe la función

El código anterior determina si la función miFuncion ha sido definida o no en el espacio de ejecución de la aplicación Javascript.

Redefinir una función.

window['miFuncion'] = function()
{
    // Nueva implementación de la función
};

El código anterior permite redefinir la implementación de la función miFuncion la cual obviamente fue especificada anteriormente.  Lo interesante de esta sintáxis de Javascript es que esta redefinición puede realizarse de manera dinámica, es decir, en un segundo archivo *.js que se cargue después del original o inclusive dentro de un condicional.

2 thoughts on “Redefinir una función en Javascript”

  1. Una preguntilla… si quisiera redefinir una funcion con Argumentos… como se haria? he probado:

    window['mv_doKoordMeasure'] = function (evt) {switch(mv_Doc.Task) {
    case "koord":
    var p = mv_Map.getRealMapPoint(evt.clientX,evt.clientY)
    alert(p.x + " : " + p.y);
    break;
    case "measure":
    mv_Measure.drawPath(evt);
    mv_showText(mv_Measure.getMeasureText());
    break;
    default:
    return true;
    break;
    }
    }

    ————————- Y he probado:

    window['mv_doKoordMeasure'] = function mv_doKoordMeasure (evt) {switch(mv_Doc.Task) {
    case "koord":
    var p = mv_Map.getRealMapPoint(evt.clientX,evt.clientY)
    alert(p.x + " : " + p.y);
    break;
    case "measure":
    mv_Measure.drawPath(evt);
    mv_showText(mv_Measure.getMeasureText());
    break;
    default:
    return true;
    break;
    }
    }

    Pero me da error de que el “objeto” no es una funcion… originalmente, llamaba a la funcion asi: mv_doKoordMeasure (evt);

  2. Saludos Pablo. Sería algo así lo que mencionas?

    window['mv_doKoordMeasure'] = function (evt) {
    // Contenido de la función
    alert("hola " + evt);
    };

    alert(typeof mv_doKoordMeasure);

    mv_doKoordMeasure("mundo");

Leave a Reply

Your email address will not be published. Required fields are marked *