¿Cómo configurar correctamente el espacio de nombres y las clases de JavaScript?

Parece que hay muchas formas de configurar una aplicación JavaScript, por lo que es confuso en cuanto a cuál es la mejor o la mejor. ¿Hay alguna diferencia con respecto a las siguientes técnicas o una mejor manera de hacerlo?

MyNamespace.MyClass = {
    someProperty: 5,
    anotherProperty: false,

    init: function () {
        //do initialization
    },

    someFunction: function () {
        //do something
    }
};

$(function () {
    MyNamespace.MyClass.init();
});

De otra manera:

MyNamespace.MyClass = (function () {
    var someProperty = 5;
    var anotherProperty = false;

    var init = function () {
        //do something
    };

    var someFunction = function () {
        //do something
    };

    return {
        someProperty: someProperty
        anotherProperty: anotherProperty
        init: init
        someFunction: someFunction
    };
}());

MyNamespace.MyClass.init();

La primera tecnicasiente más como una clase. Estoy viniendo del fondo del lado del servidor si esto hace una diferencia. La segunda técnica parece más redundante y un poco incómoda, pero veo que esto también se usa mucho. ¿Puede alguien ayudar a arrojar algo de luz y aconsejar la mejor manera de avanzar? Quiero crear una aplicación con muchas clases hablando entre ellas.

Respuestas a la pregunta(5)

Su respuesta a la pregunta