¿Hay alguna manera de hacer que cualquier función genere una declaración console.log cuando se invoca registrando un enlace global en alguna parte (es decir, sin modificar la función real) o por algún otro medio ?Agregando console.log a cada función automáticamente
Respuesta
Aquí está una manera de aumentar todas las funciones en el espacio de nombres global con la función que desee:
function augment(withFn) {
var name, fn;
for (name in window) {
fn = window[name];
if (typeof fn === 'function') {
window[name] = (function(name, fn) {
var args = arguments;
return function() {
withFn.apply(this, args);
return fn.apply(this, arguments);
}
})(name, fn);
}
}
}
augment(function(name, fn) {
console.log("calling " + name);
});
Un aspecto negativo es que no hay funciones creadas después de llamar augment
tendrán el comportamiento adicional.
¿Maneja correctamente los valores de retorno de la función? – SunnyShah
@SunnyShah No, no lo hace: http://jsfiddle.net/Shawn/WnJQ5/ Pero este hace: http://jsfiddle.net/Shawn/WnJQ5/1/ aunque no estoy seguro de que funcione en TODOS los casos ... La diferencia está cambiando 'fn.apply (this, arguments);' to 'return fn.apply (this, arguments);' – Shawn
@Shawn @SunnyShah Fixed. Solo necesitaba agregar un 'return' a la función más interna. –
Puede adjuntar su propia función a console.log para todo lo que se carga.
console.log = function(msg) {
// Add whatever you want here
alert(msg);
}
¿Debo explicar mi voto negativo? – vladkras
esto es 100% correcto –
Aquí hay un poco de Javascript que reemplaza agrega console.log a cada función en Javascript; Jugar con él en Regex101:
$re = "/function (.+)\\(.*\\)\\s*\\{/m";
$str = "function example(){}";
$subst = "$& console.log(\"$1()\");";
$result = preg_replace($re, $subst, $str);
Es un 'rápido y sucio truco', pero me parece que es útil para la depuración. Si tiene muchas funciones, tenga cuidado porque esto agregará mucho código. Además, el RegEx es simple y podría no funcionar para nombres/declaraciones de funciones más complejas.
Si desea un registro más específico, el siguiente código registrará las llamadas de función para un objeto en particular. Incluso puede modificar prototipos de objetos para que todas las instancias nuevas también se registren. Usé Object.getOwnPropertyNames en lugar de ... in, por lo que funciona con las clases de ECMAScript 6, que no tienen métodos enumerables.
function inject(obj, beforeFn) {
for (let propName of Object.getOwnPropertyNames(obj)) {
let prop = obj[propName];
if (Object.prototype.toString.call(prop) === '[object Function]') {
obj[propName] = (function(fnName) {
return function() {
beforeFn.call(this, fnName, arguments);
return prop.apply(this, arguments);
}
})(propName);
}
}
}
function logFnCall(name, args) {
let s = name + '(';
for (let i = 0; i < args.length; i++) {
if (i > 0)
s += ', ';
s += String(args[i]);
}
s += ')';
console.log(s);
}
inject(Foo.prototype, logFnCall);
- 1. Resharper 6 - agregando automáticamente "esto"
- 2. console.log Javascript [Función]
- 3. DataGridViewComboBoxColumn agregando diferentes elementos a cada fila.
- 4. Detener IntelliJ 11 agregando "use strict" a cada definición de función anidada cuando JSLint está habilitado
- 5. Agregando automáticamente registros de función de entrada/salida a un proyecto
- 6. Agregando una unidad automáticamente al proyecto
- 7. Highcharts: Agregando imagen clicable a cada xAxis gridLine
- 8. JQuery: agregando valor de atributo a cada elemento
- 9. Ruby: console.log?
- 10. agregando borde a jcheckbox
- 11. agregando devolución de llamada a la función - siempre
- 12. Llamar a una función cada 60 segundos
- 13. Llamar a una función cada 10 minutos
- 14. agregando KVO a UITableViewCell
- 15. <br/> etiquetas se están agregando automáticamente a las etiquetas html en ckeditor
- 16. mensaje console.log
- 17. console.log, console.error para PHP?
- 18. Agregando rutas mediante programación a Backbone.Router?
- 19. ¿Es IE9 compatible con console.log, y es una función real?
- 20. Interceptar llamadas a console.log en Chrome
- 21. agregando JLayeredPane a JPanel
- 22. Incluye automáticamente un JSP en cada JSP
- 23. agregando nuevos objetos a localstorage
- 24. agregando funcionalidad personalizada a la consola de Chrome
- 25. valor incorrecto en console.log
- 26. alias al cromo console.log
- 27. Capturando javascript console.log?
- 28. Error en console.log?
- 29. subdirectorios Agregando Load Path
- 30. Agregando un subrepositorio de Git a Mercurial
pregunta excelente, me gustaría saber si esto es posible, pero estoy bastante seguro de que no es ... Tal vez, agregue una solicitud de función para que se agregue en el motor js para su navegador favorito ? :-) – Endophage
Pregunta perfecta, necesito algo similar como este – mjimcua