Como configurar o namespace JavaScript e as classes corretamente?

Parece que há muitas maneiras de configurar um aplicativo JavaScript, por isso é confuso quanto ao que é correto ou melhor. Há alguma diferença nas técnicas abaixo ou uma maneira melhor de fazer isso?

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

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

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

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

Outra maneira:

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

A primeira técnicasente mais como uma aula. Eu estou vindo do fundo do lado do servidor se isso faz diferença. A segunda técnica parece mais redundante e um pouco estranha, mas vejo que isso também é muito usado. Alguém por favor pode ajudar a esclarecer e aconselhar a melhor maneira de avançar? Eu quero criar um aplicativo com muitas classes conversando entre si.

questionAnswers(5)

yourAnswerToTheQuestion