Jak poprawnie skonfigurować przestrzeń nazw i klasy JavaScript?

Wygląda na to, że istnieje tak wiele sposobów na skonfigurowanie aplikacji JavaScript, że jest ona myląca co do tego, która z nich jest poprawna lub najlepsza. Czy są jakieś różnice w stosunku do poniższych technik lub lepszy sposób?

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

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

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

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

Inny sposób:

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

Pierwsza technikaczuje bardziej jak klasa. Przychodzę z tła po stronie serwera, jeśli to robi różnicę. Druga technika wydaje się bardziej zbędna i nieco niezręczna, ale widzę, że to też jest często używane. Czy ktoś może pomóc rzucić trochę światła i doradzić, jak najlepiej iść do przodu? Chcę stworzyć aplikację z wieloma zajęciami rozmawiającymi ze sobą.

questionAnswers(5)

yourAnswerToTheQuestion