Dies liegt daran, dass es bis ECMAscript 262 Edition 5 eine große Verwirrung gab, wenn Leute, die das constructor patternverwendeten, das newSchlüsselwort vergessen haben . Wenn Sie newbeim Aufrufen einer Konstruktorfunktion in ES3 vergessen haben, diese zu verwenden , thisauf das globale Objekt ( windowin 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 thiszu 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)