2009-11-02 18 views
21

Ho una funzione che non può modificare:Aggiungere a una funzione javascript

function addToMe() { doStuff(); } 

posso aggiungere a questa funzione? Ovviamente questa sintassi è terribilmente sbagliato, ma è l'idea generale ...

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

risposta

41

Si potrebbe memorizzare un riferimento alla funzione originaria, e poi ignorare che, con una funzione che richiama quella originale, e aggiunge la funzionalità che desiderano:

var originalFn = addToMe; 

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

si può fare questo perché JavaScript functions sono first-class oggetti.

Edit: Se la funzione riceve argomenti, è necessario utilizzare apply passarli al funzione originale:

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

Si potrebbe anche usare un'espressione funzione di auto-esecuzione con un argomento per memorizzare il riferimento della funzione originale, penso che sia un po 'più pulito:

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

sì, questa è probabilmente la soluzione più semplice! – mauris

+0

perfetto :) troppo facile. –

+0

grazie :) una soluzione così elegante. – silkcom

Problemi correlati