JavaScript: esaminare gli oggetti introspettivamente

JavaScript: esaminare gli oggetti introspettivamente

PHP dispone di svariate funzionalità per esaminare introspettivamente classi e oggetti. JavaScript, purtroppo, non dispone di nulla di simile. Possiamo colmare questa lacuna creando una funzione di utility che analizzi gli oggetti passati come argomento.

La funzione è la seguente:


var printObject = function(obj) {
    if (typeof obj !== 'object') {

        console.log('Not an object');
        return;

    }

    var output = '';

    for (var i in obj) {

        var propName = i;
        var propValue = obj[i];

        var type = (typeof propValue);

        switch (type) {

        case 'function':

            output += ' [method] ' + propName + '\n\n';

            break;

        case 'object':

            output += '\t[object] ' + propName + ' ' + printObject(propValue) + '\n\n';
            break;

        default:
            output += ' [property] ' + propName + ' ' + propValue + '\n\n';
            break;

        }



    }

    return output;
};

Questa funzione analizza i membri di un oggetto e li suddivide in tre categorie, ossia metodi (funzioni), proprietà e oggetti. Nel caso degli oggetti membri di un oggetto genitore, la funzione chiama ricorsivamente se stessa ed effettua la stessa analisi su questo tipo di membri.

Ecco due esempi:


var test = {
    property: 'Test',
    method: function() {
        return;
    },
    o: {
        a: 1,
        b: function() {
            return;
        }
    }
};

var lib = function() {
    this.test = 'OK';
    this.run = function() {
        console.log(this.test);
    };
    this.sub = new

    function() {
        this.foo = 'Foo';
    }();
};


var my = new lib();

alert(printObject(test));
alert(printObject(my));​

E gli array?

L'implementazione di questa funzione è basica e quindi non tiene in considerazione il tipo di dati array. Un array in JavaScript è un oggetto e si può desumere il tipo di dati in questione esaminando la proprietà constructor dell'oggetto prototype.

Potete visionare l'esempio finale in questa pagina.

Torna su