Quería mantener mis instrucciones de registro lo más breves posible, evitando que se acceda a la consola cuando no existe; Se me ocurrió la siguiente solución:Asignación de console.log a otro objeto (problema de Webkit)
var _ = {};
if (console) {
_.log = console.debug;
} else {
_.log = function() { }
}
Para mí, esto parece bastante elegante, y funciona muy bien en Firefox 3.6 (incluyendo la preservación de los números de línea que hacen console.debug
más útil que console.log
). Pero no funciona en Safari 4. [Actualización: O en Chrome. Así que la cuestión parece haber una diferencia entre Firebug y la consola Webkit] Si sigo lo anterior con
console.debug('A')
_.log('B');
la primera declaración funciona bien en ambos navegadores, pero el segundo genera una "TypeError: Tipo de error" en Safari. ¿Es esto solo una diferencia entre la implementación de la consola por parte de Firebug y Safari Web Developer Tools? Si es así, es MUY molesto en
Apple's
parte del Webkit. La vinculación de la función de la consola a un prototipo y la creación de instancias, en lugar de vincularlo directamente al objeto, no ayuda.
Podría, por supuesto, simplemente llamar al console.debug
desde una función anónima asignada al _.log
, pero luego perdería mis números de línea. ¿Alguna otra idea?
Es una característica de webkit, no un error ;-) https://bugs.webkit.org/show_bug.cgi?id=20141 –
Relacionado: http://stackoverflow.com/questions/14146316/why-does-scope-reduction-in-safari-break-existing-code – MvG