Im gesamten Web sehe ich eine große Anzahl von JavaScript-Programmierern, die window.location
statt nur schreiben location
. Ich war neugierig, ob jemand eine Erklärung dafür geben könnte, warum. window
ist das globale Objekt, und daher ist es nicht notwendig, es einzuschließen - nicht wahr? Ich meine, du siehst keine Leute schreiben window.Math.floor
oder new window.Date()
, also bin ich neugierig, warum es mit spezifiziert wird location
.
Ich verstehe, dass location
dies als "Eigenschaft" des Fensters angesehen wird, in dem Sie sich befinden, was meiner Meinung nach Sinn macht. Trotzdem sehe ich keinen Grund, das globale Objekt anzugeben. Es ist nicht möglich, überhaupt zu überschreiben location
, nicht ohne die Seite umzuleiten.
Ist dies also nur eine Eigenart, die so lange verwendet wurde, dass sie in die Art und Weise, wie wir JavaScript schreiben, integriert wurde, oder gibt es einen konkreten Grund, Dinge auf diese Weise zu tun? Ich habe Google überprüft, aber leider habe ich nichts gefunden ...
window
ist.Teilweise aus Sicherheitsgründen, falls jemand
location
irgendwo in der Scope-Kette eine Variable definiert . daswindow.location
macht es zu einem expliziten Verweis auf die Eigenschaft vonwindow
.Beispiel: 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 })(); })();
quelle
Es gibt einen großen Unterschied zwischen
window.location
und dem nativenMath
undDate
Objekte, die ist , dassMath
undDate
sind native JavaScript - Objekte , die angegeben werden als Eigenschaften des globalen Objekts bestehen, währendwindow.location
eine Eigenschaft des istwindow
Host - Objekt (ein Host - Objekt ist ein Objekt repräsentiert einen Aspekt Die Umgebung wird von der Umgebung bereitgestellt und unterliegt nicht denselben Regeln wie native JavaScript-Objekte. Andere Hostobjekte umfassendocument
und alle DOM-Elemente.window
In Browsern dient dies zwei Zwecken: Erstens als (gut spezifiziertes) globales ECMAScript-Objekt und zweitens als Host-Objekt, das Informationen über die Browserumgebung bereitstellt. Für die Verwendungwindow
in seiner Host-Objekt-Kapazität bevorzuge ich es, explizit zu sein und daswindow.
Präfix anzugeben: Die Tatsache, dass eslocation
ohne es funktioniert, ist nur ein Zufall, der auswindow
der schizophrenen Natur stammt. Wie aus anderen Antworten hervorgeht, hat dies auch den Vorteil, dass Sie in dem Fall geschützt werden, in demlocation
im aktuellen Kontext eine andere Variable vorhanden ist.Ein guter Grund dafür, kein Präfix
Date
oder kein PräfixMath
zu verwenden,window.
besteht darin, dass dadurch Code erstellt wird, der in einer Umgebung ohne Browser nicht funktioniert. Andere Umgebungen bietenwindow
im Allgemeinen keinen Alias für das globale Objekt.quelle
Ein Teil der Codierung ist Klarheit. Im Gegensatz zu Mathematik oder Datum ist der Speicherort konzeptionell eine Eigenschaft des Fensters, sodass der Code klarer wird, ihn einzuschließen. Das Fenster." Das Präfix sollte idealerweise zur Minimierung entfernt werden.
Sie haben wahrscheinlich Recht, dass ein Großteil des Grundes historisch ist. Javascript hat eine lange Geschichte des Kopierens und Einfügens.
quelle
window.location
. Die einzigen "Versus" -Seiten, die ich finden konnte, diskutierenwindow.location
vslocation.href
, was auch nicht geholfen hat.Es ist nicht immer nur eine Frage des Stils - ich habe versucht, Social-Media-Schaltflächen nach dem Ladeereignis des Fensters asynchron zu laden, indem Skriptelemente an ein Fragment angehängt und dieses Fragment dann an das Dokument angehängt wurden. Die Widgets.js von Twitter werden
location.href
an mehreren Stellen verwendet und haben im IE 8/9 den folgenden Fehler verursacht: Unerwarteter Aufruf der Methode oder des Eigenschaftenzugriffs . Ich habe nicht herausgefunden warum, aber dies passiert nur, wenn ich die Seite über einen Link von einer anderen Seite besuche. Wenn Sie das Skriptelement nur an den Kopf anhängen oder verwendenwindow.location.href
, tritt dies nicht auf, sodass es mit IE 8/9 und etwas seltsam erscheintcreateDocumentFragment()
.Beispiel:
<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>
quelle
Das
window
Objekt wird der Standardarbeitsnamensraum, solocation
wird gleich sein,window.location
.Ich denke, dass die Verwendung
location
etwas mehrdeutig ist,window.location
aus Gründen der Klarheit.quelle
function f() { var location = "home"; /* later on */ location = "http://google.com" }
crywindow.document
jedes Mal schreiben . Ich bezweifle, dass jemand das tut.Es ist nur eine Frage des Stils.
Konzeptionell
location
ist eine Eigenschaft vonwindow
(das Fenster befindet sich an einem Ort), im Gegensatz zuMath
oderDate
.quelle
location ist eine Eigenschaft des Fensterobjekts, sodass Sie es abrufen können, indem Sie window.location anfordern. Wenn Sie jedoch kein Objekt angeben, geht JavaScript davon aus, dass Sie das Fensterobjekt möchten. Das Anfordern eines Standorts entspricht also dem Anfordern von window.location.
quelle
Sie sind tatsächlich identisch. Technisch gesehen ist das Objekt "
window
" dasselbe wie der Stammbereich für Javascript-Variablen.quelle