Ответ 1
При использовании символов (функций, констант, глобальных переменных), определенных в других файлах JavaScript, я передаю их текущему файлу "функция определения области обзора" (функция верхнего уровня, обычно анонимная, которая предотвращает глобальное загрязнение пространства имен) в качестве параметров:
Как вы можете видеть на скриншоте, ReSharper (6.0.2202.688) рад jQuery
, ContainerA
и ContainerB
, хотя они не определены нигде в текущем файле. Комментарий в строке 1 есть только для JSLint (без ошибок).
Этот метод предполагает, что все другие файлы JavaScript следуют наилучшей практике для минимального загрязнения глобального пространства имен JavaScript, определяя один объект верхнего уровня, который содержит все экспортированные (общедоступные) символы (т.е. jQuery
является единственным глобальным объектом для библиотеки jQuery и ее плагинов ContainerA
является единственным глобальным объектом LibraryA, ContainerB
является единственным глобальным объектом для LibraryB и т.д.).
Поскольку вы явно не контролируете ASP.NET Web Methods, генерируя функции конструктора в глобальное пространство имен, в вашем случае вам нужно прибегнуть к конечной емкости, window
:
Это небольшое изменение в методе, предложенном @sethobrien в его комментарии. Важным (IMHO) преимуществом является то, что вы не жестко кодируете window.X
в свой код. Вместо этого ваш код создает экземпляры классов из контейнера aspNet
(который в настоящий момент является синонимом window
, но это может измениться в будущем). Кроме того, наличие aspNet.X
в коде объявляет ваше намерение более четко для людей, которые прочтут ваш код в будущем. Наконец, локальные переменные могут быть сокращены с помощью минимизаторов JavaScript, что дает немного меньший файл, передаваемый клиентским браузерам.