dedlfix: Window Object

Beitrag lesen

Tach!

Zum einen: Das window object enthält sich selbst unter window.self und zusätzlich unter window.window, dies lässt sich mindestens 5 mal fortsetzen also window.self.self.self.self.self. Warum enthält sich das Objekt selbst und dann auch noch doppelt, sowie in so vielen Ebenen?

Zeig mal mit einem Finger auf dich selbst. Der Finger zeigt also auf dich, und du stehst da und hast einen Arm mit einer Hand und einem Finger dran, der auf dich zeigt. Der Finger zeigt also auf dich, und du stehst da und hast einen Arm mit einer Hand und einem Finger dran, der auf dich zeigt. Der Finger zeigt also auf dich, und du stehst da und hast einen Arm mit einer Hand und einem Finger dran, der auf dich zeigt. Der Finger zeigt also auf dich, und du stehst da und hast einen Arm mit einer Hand und einem Finger dran, der auf dich zeigt. Und so weiter, ein Ende gibts da nicht. Wenn du den Finger wegnimmst, geht der Verweis auf dich verloren (aber nicht du selbst).

Das Window-Objekt ist jedenfalls der globale Scope. Und wenn man sich auf diesen beziehen möchte, muss man irgendwas haben, was man anfassen kann. Und das ist die Eigenschaft window, die auf das Window-Objekt zeigt. Gäbe es die nicht, könnte man nur irgendeineWindowEigenschaft = neuerWert schreiben und das klappt nicht aus lokalen Scopes heraus. Zudem zeigt this auch nur im globalen Scope auf window. Du müsstest dir also selbst einen Anfasser basteln, mit dem du gezielt auf den globalen Scope kommst. Mit der Eigenschaft window ist das bereits getan worden. window.irgendeineWindowEigenschaft = neuerWert greift auch aus lokalen Scopes auf den globalen Scope zu, jedenfalls solange window nicht lokal neu angelegt wurde.

Allerdings gibt es auch andere Umgebungen, die nicht Window als globalen Kontext haben, wie beispielsweise serverseitiges Javascript oder Web Worker. Dort kann man mit self den globalen Scope referenzieren. Warum nun auch noch self und nicht window neben serversideGlobalScope und webWorkerGlobalScope? Funktionen müssen nicht unbedingt wissen oder herausfinden, in welcher Umgebung sie laufen. Und window wäre außerhalb vom Window-Objekt auch nicht richtig, also gibts das self, das in allen Umgebungen auf den globalen Scope zeigt. Damit hat man im Window-Objekt nun window und self, aber gut, ist eben historisch gewachsen.

dedlfix.