vediamo se ce qualcuno che ce la fa ...
sto scrivendo un caz~o di script che faccia introspection di un oggetto.
1 - il metodo l'ho creato argomentando Object cosi tutti gli oggetti possiedono questo benedetto introspection().
2 - chiaramente non so quanto profondo sia l'oggetto quindi sono andato di ricorsione.
3 - per motivi di leggibilita' ho cercato di tenere traccia del livello di profondita' raggiunto in una varibile privata e legata a Object.prototype.introspection() via closure
il problema e' che funziona! in realta' mi aspettavo che l'indentazione venisse sbagliata. In particolare l'emento foo.d e indentato correttamente (e' al primo livello) anche se mi apettavo un'indentatura sbagliata. Non capisco perche? ma JavaScript finisce il ciclo for in prima di passare a ricorsioni eventuali?
GRAZIEcodice:<pre> <script type="text/javascript"> Object.prototype.introspection = (function () { var tab = 0; return function () { var i; var indentation = ""; for (i = 0; i < tab; i++) { indentation = indentation + "\t"; } tab++; var o = this; for (p in o) { if (o.hasOwnProperty(p)) { if (typeof (o[p]) !== "object") { document.write(indentation + p + " : " + o[p] + " n tabs : " + tab + "\r"); } else { document.write(indentation + p + " n tabs : " + tab + "\r"); o[p].introspection(); } } } } })(); var foo = { a: 1, b: "ciao", c: { deep1: "x", deep2: { deepdeep1: "s", deepdeep2: "www", deepdeep3: { question: "lost question", answer: 42 } } }, d: "last" } foo.introspection(); </script> </pre>

Rispondi quotando