зачем прикреплять к окну [отредактировано] - PullRequest
3 голосов
/ 24 марта 2010

Я просматривал код для qunit.

Мой вопрос: зачем вам присоединять объект qunit через свойство к объекту окна.

Вот ссылка на файл . Посмотрите на строку 11.

Если я посмотрю на запуск модульного теста с использованием firebug, вы увидите, что это свойство окна.

[править] Дополнительно: есть ли конкретный справочник для наилучшей практики для объявления вещей в определенных пространствах имен?

Ответы [ 2 ]

5 голосов
/ 24 марта 2010

Все глобальные объекты (функции, переменные и т. Д.) Являются просто дочерними элементами окна, это контекст по умолчанию.

Например: window.jQuery или window.$

Может быть, проще думать об этом таким образом ... куда бы вы их еще положили? Когда вы делаете что-то такое общее, лучше (или, по крайней мере, проще) придерживаться их в месте по умолчанию. Если вы делаете что-то сложное с большим количеством функций, объектов и т. Д. ... лучше всего поместить их в пространство имен или в объект. Например, весь код jQuery находится под jQuery, не засорен в корне DOM, как window.ajax, вместо этого jQuery.ajax.

Это гораздо аккуратнее, но, возможно, излишне, когда вы имеете дело с несколькими предметами, но это хорошая идея, чтобы убедиться, что они уникальны, если это так ... что делает quitit, добавив к своим префиксам qunit-

2 голосов
/ 24 марта 2010

Присоединение глобалов как свойств window - плохая практика. Все глобальные переменные должны быть объявлены с использованием var. Вот мои причины:

  1. Это значительно усложняет статический анализ исходного кода. По сценарию невозможно определить, какие глобальные переменные будут объявлены и когда. Необъявленные глобалы будут создавать ReferenceError s, если они используются. Использование var означает, что подъем JavaScript вступает в силу и устраняет эту проблему.
  2. Глобальные переменные, созданные таким образом, принципиально различны, и у вашего кода нет простого способа обнаружить это. Самым большим отличием является отсутствие [[DontDelete]] для глобальных переменных, созданных таким образом, что означает, что вы можете удалить свои глобальные переменные. Это глупо.
  3. Это соблазнит вас объявить ваши глобальные переменные вне глобальной области видимости. Это магия , и плохая магия в этом. Не делай этого.

Насколько мне известно, тот факт, что window.x = 1 создает глобальную переменную с именем x, представляет собой интересное любопытство JavaScript, но не должен использоваться и не отвечать на него. Однако есть веские причины использовать свойства window, поскольку это объект, подобный любому другому (более или менее). В этих случаях вы должны использовать полное имя, например, window.onload вместо просто onload.

...