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?
codice:
<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>
GRAZIE