это ключевое слово в шаблоне модуля?

Я только что начал работать в новой компании и заметил что-то, что мне кажется совершенно неправильным во многих их JS. . Я немного не решаюсь поднимать этот вопрос, не подтверждая, что это неправильно, так как я довольно молодой, я не эксперт JS, и это только мой второй день, и я не хочу выглядеть глупо.

Итак, обычно я ожидаю, что шаблон модуля будет выглядеть примерно так:

MODULENAME = MODULENAME || {};

MODULENAME.SUBMODULENAME = (function() {
    var bla = {};

    bla.somefunction = function() {
        //do stuff
    };

    //add more stuff to bla
    return bla;
}());

Что они имеют во всем своем коде:

MODULENAME = MODULENAME || {};

MODULENAME.SUBMODULENAME = (function() {
    var that = this;

    that.somefunction = function() {
        //do stuff
    };

    //add more stuff to that
    return that;
}());

Теперь, конечно, потому что функция не вызывается как конструктор с newключевое слово или как метод, thisпривязан к windowи они определяют thatкак this. Таким образом, они в основном сбрасывают все в глобальный объект, и все имена их подмодулей на самом деле являются псевдонимами для window. Есть ли причина, по которой кто-то захочет это сделать? Или это действительно так неправильно, как мне кажется?

Изменить:

Я сделал ошибку, поместив varперед определением подмодуля, изначально я написал что-то немного другое и забыл удалить var. Я также попытался сделать пример немного яснее, надеюсь, теперь более очевидно, что я имею в виду.

Изменить 2:

Также я просмотрел сценарии, выполняемые в Firebug, и они определенно добавляют все в window, этот объект — полный беспорядок.

5
задан Michal 9 May 2012 в 01:30
поделиться