Programming Languages Hacks

Importanti regole per linguaggi di programmazione rilevanti come Java, C, C++, C#…

  • Subscribe

  • Lettori

    I miei lettori abituali

  • Twitter

Reflection Ricorsiva di Oggetti Javascript

Posted by Ricibald on March 5th, 2009

Spesso lavorando con javascript ci troviamo una variabile complessa di cui non sappiamo nulla. Sarebbe bello avere un autocompletamento che ci elenchi tutte le funzioni e le proprietà ma gli IDE per ora non ci vengono troppo di aiuto (se ne conoscete qualcuno ditelo!!).

Quindi risulta utile ispezionare la variabile per trovare tutte le proprietà e funzioni che questa variabile dichiara in modo ricorsivo. A questo scopo, riporto il codice che ho scritto che consente di fare questo “sporco lavoro”. Cosa ne pensate? Esiste modo di ottimizzarlo (a parte migliorie di output)?

function TraceMethodsAndProperties(obj) {
	var prefix = "";
	var result = TraceMethodsAndPropertiesRecursion(obj, prefix);
	copyToClipboard(result);
}

function TraceMethodsAndPropertiesRecursion(obj, prefix){
	//alert('gotta:' + prefix);
	var result = "";
	try {
		if(obj != null) {
			for (var s in obj)
			{
				var value = obj[s];
				var key = prefix + s;
				
				result += "---------" + key + '=' + value + ';\n\n'
				var newPrefix = key + '.';
				result += TraceMethodsAndPropertiesRecursion(value, newPrefix);
			}
		}
	} catch(e) {
		// eccezione affogata per il singolo elemento che non consente la scansione: vai al prossimo
	}
	return result;
}

function copyToClipboard(s)
{
	window.clipboardData.setData('Text', s); // solo IE
}

Esempio di utilizzo:

    var persona = getCarloRossi();
    TraceMethodsAndProperties(persona);
    // OUTPUT:
    // ---------Nome=Carlo
    // ---------Cognome=Rossi
    // ---------Indirizzo.Via=via roma
    // ---------Indirizzo.Civico=32
    // ---------Indirizzo.CheckValid=function checkValid(via) { return via != ""; }

Leave a Reply

You must be logged in to post a comment.