2009-06-03 18 views
9

मुझे फ़ायरबग में console.log से अवगत है, और इस बात को dbug कहा जाता है (लेकिन जो कुछ भी मैं चाहता हूं)।क्या जावास्क्रिप्ट के लिए डीबीयूजी (ए * वास्तव में * वर्रों के लिए सुंदर प्रिंट) के बराबर है?

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

I'm also aware of this question, और कुछ और भी अधिक सारणीबद्ध रहा हूँ: क्या मैं के लिए देख रहा हूँ कुछ मुझे एक उद्देश्य यह है कि जावास्क्रिप्ट के लिए इस तरह दिखता में एक सुंदर प्रिंट नेस्ट दृश्य देने में करता है।

+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

वह तीसरी पंक्ति घृणित है! :) क्यों कुछ नहीं कर रहे हैं (RegExp reg reg उदाहरण)? यह छोटा और स्पष्ट है ... –

+0

ओह, जैसे: (obj exampleof 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

एचआरएम ... मुझे लगता है कि मैं इसे किसी चीज़ में बदल सकता हूं ... – cgp

3

मैंने अभी देखा this आज, शायद यही वह है जिसे आप ढूंढ रहे हैं?

+0

एक ही लिंक पोस्ट करने के लिए यहां आया ... –

+0

हाहाहा, जाहिर है, मैं अकेला व्यक्ति नहीं हूं जो रेडडिट और स्टैक ओवरफ्लो दोनों पर नियमित है। ;) –

+1

एक निश्चित विडंबना है कि यहां चयनित उत्तर उस व्यक्ति द्वारा लिखा गया था जिसने ब्लॉग एंट्री लिखा था जिसका आप उल्लेख कर रहे हैं। :) – cgp

संबंधित मुद्दे