Devo attivare la barra delle funzioni() ogni volta che si attiva la funzione foo(). Non ho controllo sulla funzione foo o se cambierà in futuro. Ho questa situazione regolarmente (e lo odio).Aggiunge codice alla fine di una funzione esistente
Ho scritto questa funzione per aggiungere il mio codice alla fine della funzione foo:
function appendToFunction(fn,code){
if(typeof fn == 'function'){
var fnCode = fn.toString() ;
fnCode = fnCode.replace(/\}$/,code+"\n}") ;
window.eval(fnCode); // Global scope
return true ;
}
else{
return false ;
}
}
esempio:
appendToFunction(foo,"bar();");
Questa mi sembra una pessima idea - ma funziona. Qualcuno può indicarmi una direzione migliore (più sicura) per favore.
MODIFICA: foo
non è una funzione specifica, ma molte funzioni che finiscono con. Non cambiano dinamicamente nella pagina. Ma possono essere cambiati (ad esempio richieste di convalida del modulo) di volta in volta.
Soluzione: Ho optato per una versione modificata della risposta di Adam. Non è perfetto, ma è migliore di quello che avevo:
var oldFoo = foo ;
foo = function(){
var result = oldFoo.apply(this, arguments);
bar();
return result ;
}
NB. Prestare attenzione a alcune funzioni native in IE6/7 che non dispongono di un metodo .apply()
.
possibile duplicato [Aggiunta codice a una funzione JavaScript programatically] (http://stackoverflow.com/questions/9134686/adding-code-to- a-javascript-function-programatically) –