В Интернете я вижу огромное количество программистов, пишущих на JavaScript, window.location
а не просто location
. Мне было любопытно, может ли кто-нибудь объяснить, почему. window
является глобальным объектом, и поэтому его необязательно включать, не так ли? Я имею в виду, вы не видите, что люди пишут window.Math.floor
или new window.Date()
, поэтому мне любопытно, почему это было указано с location
.
Я понимаю, что location
это считается «свойством» окна, в котором вы находитесь, что, как я полагаю, имеет определенный смысл. Но даже в этом случае я не вижу смысла указывать глобальный объект; Во location
-первых, невозможно перезаписать без перенаправления страницы.
Итак, это просто причуда, которая использовалась так долго, что стала интегрированной с тем, как мы пишем JavaScript, или есть какая-то реальная причина для этого? Проверил гугл, но, увы, ничего не нашел ...
window
есть.Частично для безопасности на случай, если кто-то определит
location
переменную где-то в цепочке областей видимости.window.location
делает это явное указание на свойствоwindow
.Пример: http://jsfiddle.net/dr6KH/
(function() { var location = 'new value'; // creating a local variable called "location" (function() { alert(location); // alerts "new value" alert(window.location); // alerts the toString value of window.location })(); })();
источник
Существует большая разница между
window.location
собственными объектамиMath
иDate
объектами, заключающаяся в том, чтоMath
иDate
являются собственными объектами JavaScript, которые определены как свойства глобального объекта, аwindow.location
являются свойствомwindow
объекта хоста (объект хоста - это объект, представляющий некоторый аспект окружение, предоставляемое окружением, и не подчиняется тем же правилам, что и собственные объекты JavaScript. Другие хост-объекты включаютdocument
любой элемент DOM).window
в браузерах служит двум целям: во-первых, действует как (четко определенный) глобальный объект ECMAScript, а во-вторых, действует как объект-хост, предоставляющий информацию о среде браузера. Что касается использованияwindow
в качестве хост-объекта, я предпочитаю быть явным и предоставитьwindow.
префикс: тот факт, чтоlocation
работает без него, - просто совпадение, происходящее изwindow
шизофренической природы России. Кроме того, как указано в других ответах, это также имеет то преимущество, что защищает вас в случае, когдаlocation
в текущем контексте существует другая переменная.Одна из веских причин для отказа от префикса
Date
илиMath
с помощьюwindow.
заключается в том, что при этом создается код, который не работает в среде, отличной от браузера. Другие среды обычно не предоставляютwindow
в качестве псевдонима для глобального объекта.источник
Часть кода - ясность. В отличие от Math или Date, местоположение концептуально является свойством окна, поэтому код становится более понятным для его включения. Окно." В идеале префикс следует удалить для минификации.
Вы, наверное, правы, что во многом причина историческая. Javascript имеет обширную историю копирования и вставки.
источник
window.location
. Единственные страницы «против», которые я смог найти, обсуждаютwindow.location
противlocation.href
, что тоже не помогло.Это не всегда просто вопрос стиля - я пытался асинхронно загружать кнопки социальных сетей после события загрузки окна, добавляя элементы скрипта к фрагменту, а затем добавляя этот фрагмент в документ. Twitter widgets.js используется
location.href
в нескольких местах и вызывал следующую ошибку в IE 8/9: Неожиданный вызов метода или доступа к свойству . Я не понял почему, но это происходит только при посещении страницы по ссылке с другой страницы. Если вы просто добавляете элемент скрипта в заголовок или используетеwindow.location.href
, этого не происходит, поэтому с IE 8/9 иcreateDocumentFragment()
.Пример:
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.stackoverflow.com">Tweet</a> <script> (function (d, t) { var head = document.getElementsByTagName('head')[0]; var frag = d.createDocumentFragment(); var s = d.createElement(t); s.async = true; s.src = 'http://platform.twitter.com/widgets.js'; frag.appendChild(s); head.appendChild(frag); } (document, 'script')); </script>
источник
window
Объект рабочего пространства имен по умолчанию, такlocation
будет равнаwindow.location
.Я думаю, что использование
location
немного двусмысленно, используйтеwindow.location
для ясности.источник
function f() { var location = "home"; /* later on */ location = "http://google.com" }
crywindow.document
каждый раз. Я сомневаюсь, что кто-то так делает.Это просто вопрос стиля.
По сути,
location
это свойствоwindow
(окно находится в определенном месте), в отличие отMath
илиDate
.источник
location - это свойство объекта окна, поэтому вы можете получить его, запросив window.location. Но если вы не укажете объект, JavaScript предполагает, что вам нужен объект окна. Таким образом, просто запрос местоположения аналогичен запросу window.location.
источник
На самом деле они идентичны. Технически "
window
" объект - это то же самое, что и корневая область видимости для переменных Javascript.источник