Struppi: Objekt erwartet, in Zeile eines Funktionsaufrufes

Beitrag lesen

<script>
function Jemand( werDenn ) {

alert ( '(this===window) in neuem Objekt: ' + (this===window) );

var selbst = this;

this.name = werDenn;
this.biste = function() {

alert ( '(this===window) in Methode: ' + (this===window) );

this.name = "Mr.Spock";

meinName = function () {

Naja, meinName ist in deinem Fall eine Funktion des globalen Objektes, wobei aber ein var davor für die Fragstellung keinen Unterschied macht.

In der inneren Funktion "meinName()" aber, ist "this" plötzlich das globale Objekt (in der auskommentierten Zeile), denn diese Funktion wird mit "return meinName();" direkt aufgerufen.

Also nicht im Kontext des Objektes (this), folglich muss this in der Funktion das globale Objekt sein.

Man kann das Problem eleganter als mit .call() umschiffen, indem man (vorsichtshalber grundsätzlch in jedem Objekt) eine private Variable "selbst" definiert, die dann in inneren Funktionen an Stelle des kaputten "this" benutzt wird.

Jaja, ich weiß, ob es eleganter ist eine zusätzlich Variabel einzuführen sei aber mal dahin gestellt, ich mache das aber auch meistens so.

Aber das ist reine Spekulation. Genauso gut könnte es sein, dass es sich einfach um eine Nachlässigkeit in der urprünglichen Implementierung handelt, die man später auch in der Spezifikation nicht mehr zu bereinigen wagte, um bestehende Programme nicht zu gefährden. Das ist z.B. im Fall der fehlerhaften typeof-Funktion  bekanntermaßen so.

Was ist da fehlerhaft?
Ich hab gesucht und konnte keinen Hinweis darauf finden.

Preisfrage:
Welches Statement ist schneller: "window.document" oder nur "document"?

Das ist mir auch schon über den Weg gelaufen, weißt du auch warum?
Die Seiten die ich zu "JS optimization" gefunden habe, empfehlen alle window.document

Nein, "window.document" ist umständlicher, ...

Das wollte ich damit sagen, aber seltsamerweise findest du auf allen möglichen Seite über JS Optimierung genau die andere Variante als Empfehlung. Danke für die Erläuterung klingt logisch.

Struppi.