Simple JavaScript Object Reflection API (.NET Style)

Feb 28, 2008  • Javascript

I was thinking about how JavaScript JSON serializers go about serializing objects. But how does the serializer know about each of the objects properties? I figured JavaScript must have some method of object reflection (similar to .NET Reflection) and it does.

Here’s a simple Reflection namespace that allows you to more easily reflect through an objects methods and properties:

if (typeof PietschSoft == 'undefined') var PietschSoft = {};
if (typeof PietschSoft.Reflection == 'undefined') PietschSoft.Reflection = {};

PietschSoft.Reflection.GetProperties = function(obj){
    var props = new Array();
    for (var s in obj)
    {
        if (typeof(obj[s]) != 'function') {
            props[props.length] = s;
        }
    }
    return props;
};

PietschSoft.Reflection.GetMethods = function(obj) {
    var methods = new Array();
    for (var s in obj)
    {
        if (typeof(obj[s]) == 'function') {

            methods[methods.length] = s;

        }
    }
    return methods
};

And, here’s some simple code using the above simple reflection api:

/// Define our Person Object

Person = function() {
this.FirstName = '';
this.LastName = '';
};

Person.prototype.TestFunction = function(){return 'Test Function';};

// Define our instance of the Person object
var p = new Person();
p.FirstName = 'Chris';
p.LastName = 'Pietschmann';

/// Loop through the Objects Properties
var props = PietschSoft.Reflection.GetProperties(p);
for (var i in props)
{
    alert(props[i] + ' : ' + p[props[i]]);
}

/// Loop through the Objects Methods
var methods = PietschSoft.Reflection.GetMethods(p);
for (var i in methods)
{
    alert(methods[i] + ' : ' + p[methods[i]]);
}