2012-02-14 11 views
24

¿Es posible extender el objeto de la consola?¿Puedo extender el objeto de la consola (para reencaminar el registro) en javascript?

he intentado algo así como:

Console.prototype.log = function(msg){ 
    Console.prototype.log.call(msg); 
    alert(msg); 
} 

Pero esto no funcionó. Quiero agregar un registro adicional al objeto de la consola a través de un marco como log4javascript y aún utilizar el objeto de la consola estándar (en los casos donde log4javascript no está disponible) en mi código.

¡Gracias de antemano!

+2

¿Por qué extiende el objeto prototipo en lugar de extender el objeto 'Console' en sí? ¿Alguna vez llamas 'nueva Consola()'? – biziclop

Respuesta

35

seguir los siguientes pasos:

(function() { 
    var exLog = console.log; 
    console.log = function(msg) { 
     exLog.apply(this, arguments); 
     alert(msg); 
    } 
})() 
2

Usted puede también añadir tiempo conectarse De esta manera:

agregó Momentjs o usa Nueva fecha() en lugar de momento.

var oldConsole = console.log; 
console.log = function(){ 
    var timestamp = "[" + moment().format("YYYY-MM-DD HH:mm:ss:SSS") + "] "; 
    Array.prototype.unshift.call(arguments, timestamp); 
    oldConsole.apply(this, arguments); 
}; 
0
// console aliases and verbose logger - console doesnt prototype 
var c = console; 
c.l = c.log, 
c.e = c.error, 
c.v = c.verbose = function() { 
    if (!myclass || !myclass.verbose) // verbose switch 
     return; 
    var args = Array.prototype.slice.call(arguments); // toArray 
    args.unshift('Verbose:'); 
    c.l.apply(this, args); // log 
}; 

// you can then do 
var myclass = new myClass(); 
myclass.prototype.verbose = false; 
// generally these calls would be inside your class 
c.v('1 This will NOT log as verbose == false'); 
c.l('2 This will log'); 
myclass.verbose = true; 
c.v('3 This will log'); 

he observado que el uso anterior de Array.prototype.unshift.call por nitesh es una mejor manera de añadir el 'detallado:' etiqueta.

Cuestiones relacionadas