2009-06-03 13 views
9

Firebug'da console.log'un farkındayım ve bu şey dbug (ama istediğim kadar değil). dbug output http://dbug.ospinto.com/img/screenshots.pngjavascript için dbug (a * gerçekten * pretty print for vars) için herhangi bir eşdeğer var mı?

I'm also aware of this question

, ve bir şey biraz daha sekmeli arıyorum: Ne aradığım javascript için şöyle bir nesne haline bana oldukça baskı iç içe bir görünüm verecektir şeydir.

+2

İlginç bir soru, nasıl bu kadar güzel bir yazıcının dairesel referanslar için çalışacağını merak ediyorum ... –

cevap

5

denemesi:

bir demo izleyin: http://jsbin.com/oxeki

kodu:

var prettyPrint = (function(){ 

    var htmlObj = function(obj){ 
      if (Object.prototype.toString.call(obj) === '[object RegExp]') { 
       return obj.toSource ? obj.toSource() : '/' + obj.source + '/'; 
      } 
      if (typeof obj === 'object') { 
       return prettyPrint(obj); 
      } 
      if (typeof obj === 'function') { 
       return document.createTextNode('function(){...}'); 
      } 
      return obj.toString(); 
     }, 
     row = function(cells, type){ 
      type = type || 'td'; 
      var r = document.createElement('tr'); 
      for (var i = 0, l = cells.length; i < l; i++) { 
       var td = document.createElement(type); 
       td.appendChild(typeof cells[i] === 'string' ? document.createTextNode(cells[i]) : cells[i]); 
       r.appendChild(td); 
      } 
      return r; 
     }, 
     heading = function() { 
      var thead = document.createElement('thead'); 
      thead.appendChild(row(['Name','Value'], 'th')); 
      return thead; 
     }; 


    return function(obj) { 

     var tbl = document.createElement('table'), 
      tbody = document.createElement('tbody'); 

     for (var i in obj) { 
      var objCellContent = obj[i] === obj ? document.createTextNode('CIRCULAR REFERENCE') : htmlObj(obj[i]); 
      tbody.appendChild(row([document.createTextNode(i), objCellContent])); 
     } 

     tbl.appendChild(heading()); 
     tbl.appendChild(tbody); 
     return tbl; 

    }; 

})(); 
+0

Bu üçüncü satır çok çirkin! :) Neden bir şey yapmıyorsunuz (RegExp Reg Reg)? Daha kısa ve daha net ... –

+0

Oops, like: (obj instanceof RegExp). Sen grat olsun ... –

+0

Jason, bu şekilde farklı kareler üzerinde çalışmaz ... (farklı pencereler) – James

2

Bu tür bir hata ayıklayıcısına rastlamamış olmama rağmen, bu özel stilin kendi başına yazması çok zor gibi görünmüyor. Sadece mevcut nesneyi geçen basit bir özyinelemeli fonksiyon ve yazı yazmaya başlamak için bir tablo hücresi, o zaman sadece siz yapın.

Yukarıdaki döngüsel referans yorumu için, daha önce işlediğiniz nesnelerin bir dizisini tutarak kolayca atlatılabilir. Bir nesneyi işlemeden önce, listede olup olmadığını kontrol edin. eğer öyleyse, çıktınızın değer alanında, "döngüsel referans" gibi bir şey olduğunu belirtin, ancak nesneyi hiyerarşiyi göstermek istersiniz.

prettyprint(object, processedObjects) 
{ 
    if (processedObjects.contains(object)) 
     return 'circular refernece'; 

    processedObjects.push(object); 

    create newTable; 

    for (var in object) 
    { 
     row = newTable.addRow(); 
     row.cell1.value = var; 
     if (typeof object[var] is object) 
      row.cell2.value = prettyprint(object[var], processedObjects); 
     else if (typeof object[var] is function) 
      row.cell2.value = '[function]'; 
     else 
      row.cell2.value = object[var].toString(); 
    } 

    return newTable; 
} 
+0

Hrm ... Sanırım bir şeye dönüşebilirim ... – cgp

3

Az öncegördümbugün, belki de aradığınız şey bu mu?

+0

aynı bağlantıyı göndermek için buraya geldi ... –

+0

Hahaha, görünüşe göre, hem reddit hem de stack overflow'ta düzenli olan tek kişi ben değilim. ;) –

+1

Burada seçilen cevabın, atıfta bulunduğunuz blog girişini yazan kişi tarafından yazıldığına dair belirli bir ironi var. :) – cgp

İlgili konular