2009-11-02 10 views
21

Tengo una función que no puedo modificar:Añadir a una función de JavaScript

function addToMe() { doStuff(); } 

puedo añadir a esta función? Obviamente esta sintaxis es terriblemente mal, pero es la idea general ...

function addToMe() { addToMe() + doOtherStuff(); } 

Respuesta

41

Se puede almacenar una referencia a la función original, y luego anularlo, con una función que devuelve la llamada a la original, y se suma la funcionalidad que desean:

var originalFn = addToMe; 

addToMe = function() { 
    originalFn(); // call the original function 
    // other stuff 
}; 

usted puede hacer esto porque JavaScript functions son first-class objetos.

Editar: Si su función recibe argumentos, se debe utilizar apply para pasarlos a la función original:

addToMe = function() { 
    originalFn.apply(this, arguments); // preserve the arguments 
    // other stuff 
}; 

También es posible usar una expresión de la función de auto-ejecución con un argumento para almacenar la referencia de la función original, creo que es un poco más limpia:

addToMe = (function (originalFn) { 
    return function() { 
    originalFn.apply(originalFn, arguments); // call the original function 
    // other stuff 
    }; 
})(addToMe); // pass the reference of the original function 
+0

¡esa es probablemente la solución más simple! – mauris

+0

perfecto :) muy fácil. –

+0

gracias :) una solución tan elegante. – silkcom

Cuestiones relacionadas