Ich habe nicht über solch einen Debugger laufen, obwohl es nicht scheint, dass dieser bestimmte Stil zu schwer wäre, alleine zu schreiben. Nur eine grundlegende rekursive Funktion, die das aktuelle Objekt und eine Tabellenzelle weitergibt, um mit dem Schreiben zu beginnen, erstellen Sie einfach so, wie Sie gehen.
Wie bei dem obigen Zirkelbezugskommentar kann dies leicht umgangen werden, indem ein Array von Objekten beibehalten wird, die Sie bereits verarbeitet haben. Überprüfen Sie vor der Verarbeitung eines Objekts, ob es bereits in der Liste vorhanden ist. Wenn ja, bezeichne das im Wertfeld deiner Ausgabe als etwas wie "Zirkelbezug zu" ... aber du willst das Objekt in der Hierarchie bezeichnen.
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;
}
Interessante Frage, obwohl ich mich wundere, wie solch ein hübscher Drucker für Zirkelverweise arbeiten würde ... –