Я только что начал работать в новой компании и заметил что-то, что мне кажется совершенно неправильным во многих их 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
, этот объект — полный беспорядок.