2012-02-14 17 views
24

Có thể mở rộng đối tượng bảng điều khiển không?Tôi có thể mở rộng đối tượng điều khiển (để định tuyến lại nhật ký) trong javascript không?

tôi đã cố gắng một cái gì đó như:

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

Nhưng điều này đã không làm việc. Tôi muốn thêm ghi nhật ký bổ sung vào đối tượng bảng điều khiển thông qua một khung như log4javascript và vẫn sử dụng đối tượng điều khiển chuẩn (trong trường hợp không có liên kết log4javascript) trong mã của tôi.

Cảm ơn trước!

+2

tại sao bạn mở rộng đối tượng mẫu thử thay vì mở rộng đối tượng 'Console'? Bạn có bao giờ gọi 'console mới() '? – biziclop

Trả lời

35

Hãy thử sau:

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

Bạn cũng có thể thêm log Time in Đường này:

thêm Momentj hoặc sử dụng Ngày mới() thay vì thời điểm.

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'); 

tôi lưu ý rằng việc sử dụng trên các Array.prototype.unshift.call bởi Nitesh là một cách tốt hơn để thêm 'Verbose:' thẻ.

Các vấn đề liên quan