2009-06-03 12 views
9

私はfirebugのconsole.logを知っていて、このことはdbugと呼ばれています(しかし、私は何も望んでいません)。javascript用のdbugに相当するものはありますか?

dbug output http://dbug.ospinto.com/img/screenshots.png

I'm also aware of this question、もう少し何か表を探しています:私が探しているのjavascriptのために、このようになりますオブジェクトに私にはかなりの印刷ネストされたビューを与えるものです。

+2

私はこのようなかわいいプリンターが循環参照のためにどのように働くのだろうかと興味深い質問があります... –

答えて

5

の試み:

デモを参照してください:http://jsbin.com/oxeki

コード:

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

その3行目は恐ろしいです! :)なぜ(RegインスタンスのRegExp)のような何かをしないでください?それはより短く、より明確です... –

+0

ようこそ:(obj instanceof RegExp)。あなたは要点を得ます... –

+0

ジェイソン、その方法は異なるフレームでは動作しません...(別のウィンドウ) – James

2

私はこのようなデバッガを実行していませんが、この特定のスタイルはあなた自身で書くのが難しいようです。現在のオブジェクトとテーブルセルを渡すだけの基本的な再帰関数です。

上記の循環参照コメントは、既に処理したオブジェクトの配列を保持することで簡単に回避できます。オブジェクトを処理する前に、オブジェクトがすでにリストに入っているかどうかを確認してください。そうであれば、出力の値フィールドに "循環参照"のようなものを表示します。ただし、オブジェクトを階層の上に表示したいとします。

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 ...私はこれを何かに変えることができると思います... – cgp

3

私はちょうどを見た今日、多分これはあなたが探しているものですか?

+0

同じリンクを投稿するためにここに来た... –

+0

ハハハ、明らかに私はredditとstack overflowの両方でレギュラーである唯一の人ではありません。 ;) –

+1

ここで選択された答えはあなたが参照しているブログエントリを書いた人によって書かれていることは皮肉です。 :) – cgp

関連する問題