JavaScript: reflection function

by gabrieleromanato

JavaScript

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;
};



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));