Necesito activar la barra de funciones() siempre que la función foo() se dispare. No tengo control sobre la función foo o si cambiará en el futuro. Tengo esta situación regularmente (y lo odio).Añadir código al final de una función existente
escribí esta función para añadir mi código al final de la función 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 ;
}
}
por ejemplo:
appendToFunction(foo,"bar();");
Esto me parece una idea terrible - pero funciona. ¿Puede alguien señalarme en una dirección mejor (más segura) por favor?
EDITAR: foo
no es una función específica, sino muchas funciones con las que termino lidiando. No cambian dinámicamente en la página. Pero pueden cambiarse (por ejemplo, solicitudes de validación de formularios) de vez en cuando.
Solución: Me decidí por una versión modificada de Adam's Answer. No es perfecto, pero es mejor que el que tenía:
var oldFoo = foo ;
foo = function(){
var result = oldFoo.apply(this, arguments);
bar();
return result ;
}
NB. Tenga cuidado con algunas funciones nativas en IE6/7 que no tienen un método .apply()
.
posible duplicado de [Adición de código para una función de JavaScript programáticamente] (http://stackoverflow.com/questions/9134686/adding-code-to- a-javascript-function-programtically) –