Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

L'objet global et this

2 réponses
Avatar
Tom
Voil=E0 j'ai un petit probleme... Dans tous les tutoriaux sur le net je
vois que le motCle "this" d=E9finit =E0 la base m=EAme du script est
=E9quivalent =E0 "window".

Mais le simple script suivant me montre que les proprietes des deux
objets different que ce soit sur Explorer, Netscape ou Opera...
Pouvez-vous m'expliquer ou un lien expliquant pourquoi ils ne sont pas
identiques


<script type=3D"text/javascript">
for(var i in this){ //ou window
document.write(i+" "+"<br>");
}
</script>

De plus
document.write(this =3D=3D document);
Donne true dans Internet Explorer mais false dans Netscape ou Opera

2 réponses

Avatar
Yann-Erwan Perio
Tom wrote:

Bonjour,

Voilà j'ai un petit probleme... Dans tous les tutoriaux sur le net je
vois que le motCle "this" définit à la base même du script est
équivalent à "window".


En fait, la valeur de "this" dépend du contexte d'execution. Si "this"
est employé dans une méthode, alors la valeur de "this" est une
référence vers l'objet auquel la méthode appartient, sinon la valeur de
"this" est une référence vers l'objet global ("global object").

L'objet global est un objet situé tout en haut des chaînes de portée
javascript, il appartient à javascript. Lorsque javascript est inclus
dans un navigateur, alors la plupart des navigateurs (je ne me
prononcerai pas pour tous) joignent l'objet global et "window".

Mais le simple script suivant me montre que les proprietes des deux
objets different que ce soit sur Explorer, Netscape ou Opera...

<script type="text/javascript">
for(var i in this){ //ou window
document.write(i+" "+"<br>");
}
</script>


Si on fait ce tourner ce script alternativement avec "this" et "window",
on obtient les mêmes propriétés pour Opera, IE et un écart sur
navigator, window et location pour Mozilla.

De plus
document.write(this == document);
Donne true dans Internet Explorer mais false dans Netscape ou Opera


Dans IE: this==document donne true, this===document donne false.
Dans Mozilla: this===window donne true, mais certaines propriétés de
window ne sont pas énumérées dans une boucle (for..in) appliqué sur "this".

L'égalité entre "window" et "this" reste un problème d'implémentation
par les user agents, et tout en étant admise n'en reste pas moins non
documentée (même si ECMA262 donne un "hint").

Personnellement, lorsque je souhaite utiliser le "global object" (i.e.
l'objet global, indépendamment du host) je code "this", même pour du
code écrit pour un browser; lorsque je réfère vraiment au node "window",
alors j'utilise window.


Cordialement,
Yep.

Avatar
Tom
Trop cool

Merci... J'avais trops galere et me voila fixer.