2012-02-14 13 views
24

È possibile estendere l'oggetto console?Posso estendere l'oggetto console (per reindirizzare la registrazione) in javascript?

ho provato qualcosa di simile:

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

Ma questo non ha funzionato. Desidero aggiungere ulteriore registrazione all'oggetto console tramite un framework come log4javascript e utilizzare ancora l'oggetto console standard (nei casi in cui log4javascript non è disponibile) nel mio codice.

Grazie in anticipo!

+2

perché estendere l'oggetto prototipo invece di estendere l'oggetto 'Console' stesso? Chiamate mai 'new Console()'? – biziclop

risposta

35

Prova seguente:

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

è anche possibile aggiungere il login Tempo in This Way:

aggiunto Momentjs o utilizzare Nuova data() anziché il 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'); 

ho notato che l'uso sopra di Array.prototype.unshift.call da Nitesh è un modo migliore per aggiungere il 'verbose:' tag.

Problemi correlati