Подтвердить что ты не робот

Window.location против просто местоположения

Во всем Интернете я вижу огромное количество программистов JavaScript, пишущих window.location, а не только location. Мне было любопытно, может ли кто-нибудь дать объяснение, почему. window - глобальный объект, и поэтому нет необходимости включать - не так ли? Я имею в виду, вы не видите, что люди пишут window.Math.floor или new window.Date(), поэтому мне любопытно, почему это будет указано с помощью location.

Я понимаю, что location считается "свойством" окна, в котором вы находитесь, что, по-моему, имеет смысл. Но даже в этом случае я не вижу причины указывать глобальный объект; невозможно перенести location в первую очередь, не переадресовывая страницу.

Итак, это просто причуда, которая использовалась так долго, что она интегрируется с тем, как мы пишем JavaScript, или есть какая-то осязаемая причина делать что-то таким образом? Я проверил Google, но, увы, я ничего не придумал...

4b9b3361

Ответ 1

Я всегда использую window.location в своем коде по двум основным причинам:

  • Хорошая привычка избегать глобальных переменных, когда это возможно. Использование префикса window. напоминает мне, что переменная глобальна, а другие нет.
  • Характер охвата Javascript позволяет переопределить переменные, установленные выше дерева областей. Это означает, что вы могли бы установить var location где-то в области сложения (это не маловероятное слово для использования в качестве имени переменной), и вместо этого вы будете работать над этим.

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

Ответ 2

Отчасти для безопасности в случае, если кто-то определяет переменную 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
    })();

})();

Ответ 3

Часть кодирования является ясностью. В отличие от Math или Date, местоположение концептуально является свойством окна, поэтому код становится более понятным для его включения. Окно." префикс в идеале должен быть удален для минимизации.

Вероятно, вы правы, что причина в том, что причина имеет исторический характер. Javascript имеет обширную историю копирования и вставки.

Ответ 4

Существует большая разница между window.location и собственными объектами Math и Date, что означает, что Math и Date являются родными объектами JavaScript, которые определены как свойства глобального объекта, тогда как window.location является свойством объекта-объекта window (объект-хост представляет собой объект, представляющий некоторый аспект среды, предоставляемый средой, и не подчиняется тем же правилам, что и исходные объекты JavaScript). Другие объекты-хосты включают document и любой элемент DOM).

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

Одной из веских причин не префикса Date или Math с помощью window. является то, что при этом создается код, который не работает в среде, отличной от браузера. Другие среды обычно не предоставляют window как псевдоним для глобального объекта.

Ответ 5

Это не всегда вопрос стиля - я пытался асинхронно загружать социальные медиа-кнопки после события загрузки окна, добавляя элементы script к фрагменту, а затем добавляя этот фрагмент в документ. Twitter widgets.js использует location.href в нескольких местах и ​​вызывает следующую ошибку в IE 8/9: Неожиданный вызов метода или доступа к свойствам. Я не понял, почему, но это происходит только при посещении страницы по ссылке с другой страницы. Если вы просто добавите элемент script в голову или используйте 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>

Ответ 6

Объект window - это рабочее пространство имен по умолчанию, поэтому location будет равно window.location.

Я думаю, что использование location немного неоднозначно, используйте window.location для ясности.

Ответ 7

Это просто вопрос стиля.

Концептуально location является свойством window (окно находится в местоположении), в отличие от Math или Date.

Ответ 8

location является свойством объекта window, поэтому вы можете получить его, запросив window.location. Но если вы не укажете объект, JavaScript предполагает, что вы хотите использовать объект window. Таким образом, просто запрашивающее местоположение совпадает с запросом window.location.

Ответ 9

Они на самом деле идентичны. Технически объект "window" - это то же самое, что и корневая область для переменных Javascript.