Référence de JavaScript 1.5 Core:Instructions:with
Un article de MDC.
Sommaire |
[modifier] Résumé
Agrandit la chaîne de visibilité pour une instruction.
| Instruction | |
| Implémentation : | JavaScript 1.0, NES 2.0 |
| Version ECMA : | ECMA-262 |
[modifier] Syntaxe
with (objet) instruction
[modifier] Paramètres
-
objet - Ajoute l'objet donné à la chaîne de visibilité utilisée lors de l'évaluation de l'instruction. Les parenthèses autour du nom de l'objet sont obligatoires.
-
instruction - N'importe quelle instruction. Pour exécuter plusieurs instructions avec
with, utilisez un bloc ({ … }) pour les regrouper.
[modifier] Description
JavaScript recherche un nom non qualifié (sans préfixe) dans une chaîne de visibilité associée avec le contexte d'exécution du script ou de la fonction contenant ce nom. L'instruction with ajoute un objet donné en tête de cette chaîne pour l'évaluation de l'instruction qu'elle contient. Si un nom non qualifié est utilisé dans cette instruction et correspond à une propriété dans la chaîne de visibilité, il correspondra à la propriété de l'objet qui la contient. S'il n'est pas trouvé, une exception « ReferenceError » est déclenchée.
Note : Firefox 1.5 générait un avertissement lorsque l'instruction with était utilisée : "deprecated with statement usage". Cet avertissement a été enlevé de Firefox 1.5.0.1 (bug 322430).
Avantages et inconvénients pour les performances
- Avantages :
withpeut aider à réduire la taille du fichier en réduisant le nombre de répétitions de longues références à un objet sans réduire les performances. La modification de visibilité qu'entrainewithn'est pas coûteuse en termes de calcul. Son utilisation allègera le travail de l'interpréteur en le dispensant d'analyser des références d'objet répétées. Notez cependant que dans de nombreux cas, ce même avantage peut être obtenu en utilisant une variable temporaire pour conserver la référence à l'objet désiré.
- Inconvénients :
withoblige l'objet spécifié à être vérifié en premier lieu pour toute recherche de nom non qualifié. Par conséquent, tous les identifiants correspondant à des paramètres formels de la fonction ou des variables déclarées seront trouvés moins rapidement au sein d'un blocwith. Là où les performances ont de l'importance,withne sera probablement utilisé que pour des blocs de code qui n'utilisent pas de paramètres de fonctions ni d'identifiants de variables déclarées.
Ambigüité
- Inconvénient :
withrend difficile la lecture par un humain ou par le compilateur JavaScript afin de déterminer si un nom non qualifié sera trouvé dans la chaîne de visibilité, et si oui, dans quel objet. Si l'on prend cette fonction par exemple :function f(x, o) { with (o) print(x); }C'est seulement au moment de l'appel de
fqu'xest trouvé ou non, et si c'est le cas, ce sera soit dansoou (si cette propriété n'existe pas) dans l'objet d'activation def, oùxindique le premier paramètre formel. Si vous oubliez de définirxdans l'objet que vous passez en second paramètre, ou s'il y a un autre problème ou confusion du même type, vous n'aurez aucune erreur — simplement des résultats inattendus.
[modifier] Exemples
[modifier] Exemple : utilisation de with
L'instruction with suivante indique que l'objet Math est l'objet par défaut. Les instructions contenues dans l'instruction with font référence à la propriété PI et aux méthodes cos et sin, sans spécifier d'objet. JavaScript utilise automatiquement l'objet Math pour ces références.
var a, x, y;
var r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}