Puede secuestrar funciones JavaScript de la siguiente manera:
(function(){
var oldLog = console.log;
console.log = function (message) {
// DO MESSAGE HERE.
oldLog.apply(console, arguments);
};
})();
- La línea 1 envuelve su función en un cierre para que ninguna otra función tenga acceso directo a
oldLog
(por motivos de mantenimiento).
- La línea 2 captura el método original.
- La línea 3 crea una nueva función.
- Línea 4 es donde envía
message
a su servidor.
- La línea 5 invoca el método original tal como se hubiera manejado originalmente.
apply
se utiliza para que podamos invocarlo en console
utilizando los argumentos originales. Simplemente llamando al oldLog(message)
fallaría porque log
depende de su asociación con console
.
actualización comentario de zzzzBov por debajo, en IE9 console.log
no es realmente una función de modo oldLog.apply
fracasarían. Vea console.log.apply not working in IE9 para más detalles.
[Su código tendrá problemas en IE porque 'console.log' no es realmente una instancia' Function' en IE] (http://stackoverflow.com/questions/5538972/console-log-apply-not-working- in-ie9). – zzzzBov
@zzzzBov Interesante. Asumo asignar 'console._oldLog = console.log; console._oldLog (message); 'funcionaría, pero si' console' en sí mismo es un objeto alojado, no se garantiza que se mantengan los cambios. Desafortunadamente, ya no tengo IE para probar esto. –
sí, aún puedes llamar a '_oldLog' así. 'oldLog = Function.prototype.bind.call (console.log, console)' funciona para IE9 +, pero luego necesita un polyfill para 'Function.prototype.bind' para IE8 y abajo. – zzzzBov