Dies liegt daran, dass es bis ECMAscript 262 Edition 5 eine große Verwirrung gab, wenn Leute, die das constructor pattern
verwendeten, das new
Schlüsselwort vergessen haben . Wenn Sie new
beim Aufrufen einer Konstruktorfunktion in ES3 vergessen haben, diese zu verwenden , this
auf das globale Objekt ( window
in einem Browser) verwiesen haben und das globale Objekt mit Variablen überhäufen würden.
Das war schrecklich Verhalten und damit die Menschen in ECMA beschlossen, nur um Satz this
zu undefined
.
Beispiel:
function myConstructor() {
this.a = 'foo';
this.b = 'bar';
}
myInstance = new myConstructor(); // all cool, all fine. a and b were created in a new local object
myBadInstance = myConstructor(); // oh my gosh, we just created a, and b on the window object
Die letzte Zeile würde einen Fehler in ES5 strict auslösen
"TypeError: this is undefined"
(was ein viel besseres Verhalten ist)