« Programmation JavaScript/Variables » : différence entre les versions

Contenu supprimé Contenu ajouté
Touffy (discussion | contributions)
Touffy (discussion | contributions)
→‎Sous-entendre un objet : correction d'une grosse erreur
Ligne 37 :
=== Sous-entendre un objet ===
 
Pour économiser du code, il peut être intéressant de sous-entendre un autre objet que '''window'''. Cela se fait explicitement avec un bloc '''with'''. Sous-entendreCette undéclaration ne fonctionne pas aussi simplement qu'en Basic, par exemple. L'objet neest en fait placé en haut de la ''scope chain'' dans le rendbloc pasd'instruction, systématiquementpresque implicitecomme si ses propriétés étaient des variables locales d'une fonction (voir [[../Scope chain]]). Lorsqu'on utilise un identificateur dans un bloc '''with''', Lala résolution se fait aussitôt qu'une des conditions suivantes est remplie :
*# l'identificateur est une propriété existante de l'objet sous-entendu
*# l'identificateur estexiste ailleurs dans la ''scope chain'', en partant du haut (par exemple, une variable locale)
*# l'identificateur est une propriété existante de l'objet implicite s'il est différent de window
* l'identificateur est une propriété existante de window
 
Si aucune condition n'est remplie et que l'expression affecte une valeur à la variable, cette variable est créée comme propriété de l'objet global. Si l'expression ne fait qu'utiliser la valeur, elle retournera simplement '''undefined'''.
Ligne 48 ⟶ 47 :
d="propriété de window"
 
monObjet={a: 0, d: "propriété de monObjet"}
 
with(monObjet)
{
alert(monObjet.da) // affiche "propriétéla valeur de monObjet.a : "0"
a=2 // monObjet.a existe et va être utilisé
// si on veut utiliser window.a, il faut le faire explicitement
b="texte" // b n'est pas encore défini nulle part
window.a=5
c=false // window.c existe donc va être utilisé
 
b="texte" // b n'est pas encore défini nulle part donc window.b est créé
// si on veut créer monObjet.b, il faut le faire explicitement
monObjet.b="autre chose"
 
delete c=false // windowmonObjet.c n'existe doncpas, mais window.c va être utilisé
alert(d) // affiche "propriété de windowmonObjet"
// poursi éviteron queveut window.d soit utilisél'autre, il faut être explicite
monObjet.d="propriété de monObjet"
alert(window.d) // affiche "propriété de window"
}
 
alert(a) // a n'est pas défini
alert(monObjet.a) // affiche "2"
 
alert(b) // affiche "texte"
alert(monObjet.b) // monObjet n'a pas de propriété b
 
alert(c) // affiche "false"
 
alert(d) // affiche "propriété de window"
alert(monObjet.d) // affiche "propriété de monObjet"
</source>