En effet, jusqu'à l'édition 5 de l'ECMAscript 262, une grande confusion régnait entre les personnes qui utilisaient l'option constructor pattern
a oublié d'utiliser le new
mot-clé. Si vous avez oublié d'utiliser new
lors de l'appel d'une fonction constructrice dans ES3, this
a fait référence à l'objet global ( window
dans un navigateur) et vous encombreriez l'objet global de variables.
C'était un comportement terrible et donc les gens de l'ECMA ont décidé, juste pour fixer this
a undefined
.
Exemple :
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
La dernière ligne entraînerait une erreur en ES5 strict.
"TypeError: this is undefined"
(ce qui est un bien meilleur comportement)