Y a-t-il des avantages pour utiliser le préfixe "Fenêtre" lorsque vous appelez des variables ou des méthodes JavaScript dans l'objet Window? Par exemple, appellerait "fenêtre.alert" avoir un avantage sur simplement appeler "alerte"? Je peux imaginer que l'utilisation du préfixe pourrait donner un coup de pouce de faible performance lorsque l'appel est fabriqué à partir de l'intérieur de la fonction / objet, mais je le vois rarement dans le code des gens. Désormais cette question. P>
7 Réponses :
Je doute qu'il y ait une prestation de performance mesurable. Une fois que toute la chaîne d'étanchéité serait numérisée pour l'identifiant Utilisation du préfixe de la fenêtre est utile si vous avez une autre variable dans la portée qui masquerait l'élément que vous souhaiteriez peut-être récupérer de la fenêtre. La question est que vous pouvez toujours savoir quand cela pourrait être? La réponse est non. Alors, devriez-vous toujours préfixer avec la fenêtre? À quoi ressembleriez-vous si vous le faites. Moche. Par conséquent, ne le faites pas à moins que vous sachiez que vous devez. P> fenêtre code> d'abord, l'objet de la fenêtre serait numérisé pour l'élément souhaité. Par conséquent plus probablement, il serait déterimental de la performance. P>
Je ne savais pas que la chaîne de la portée serait numérisée pour la fenêtre! J'ai toujours pensé que la fenêtre était un mot clé réservé, et cela ne se produirait donc pas. Merci.
La chaîne d'étendue travaille réellement l'inverse. Les variables locales remplacent les globaux mondiaux.
J'imagine que la prestation de performance ici est incroyablement insignifiante au mieux, s'il y en a un du tout. P>
Cela ne compte que si vous utilisez des cadres et que vous faites un tas d'appels JavaScript entre des cadres, et seuls uniquement des scénarios spécifiques justifiant la nécessité de référencer la fenêtre code> explicitement. P>
Lorsque vous utilisez le préfixe, vous faites explicite que vous utilisez la définition "globale" de la variable, pas une locale. (Je ne suis pas sûr de savoir si / comment vous pouvez injecter des variables dans une portée dans JS, à l'exception de l'étrangeté avec les gestionnaires d'événements et en ligne.) YMMV, vous pouvez préférer soit la clarté, soit le trouver simplement sur une fouille. P >
récupéré de Google ( http://www.techotopia.com/index.php/javascript_window_Object ): p>
L'objet de la fenêtre est l'objet de niveau supérieur de la hiérarchie de l'objet. En tant que tel, chaque fois qu'une méthode d'objet ou une propriété est référencée dans un script sans nom d'objet et préfixe de points, il est supposé que JavaScript soit un membre de l'objet Window. Cela signifie, par exemple, que lors de l'appel de la méthode d'alerte de la fenêtre () pour afficher une boîte de dialogue d'alerte, la fenêtre. Le préfixe n'est pas obligatoire. Par conséquent, les appels de méthode suivants obtiennent la même chose: P>
window.alert ()
alerte () p> blockQuote>Cependant, j'ai lu mais je n'ai pas eu le temps de tester ce qui suit: ( http://www.javascriptref.com/reference/Object.cfm?key = 20 ) p>
Un endroit où vous devrez faire attention, cependant, est dans les gestionnaires d'événements. Étant donné que les gestionnaires d'événements sont liés au document, une propriété de document avec le même nom que la propriété de fenêtre (par exemple, ouverte) masquera la propriété de la fenêtre. Pour cette raison, vous devez toujours utiliser la "fenêtre". Syntaxe lors de l'adressage des propriétés de la fenêtre dans les gestionnaires d'événements. P> blockQuote>
Ceci est utile lorsque vous essayez de tester les valeurs d'objet globales. Par exemple, si mais cela ne jette pas une erreur: p> De même avec: p> et: p> Je ne m'attendrais pas à voir une différence de performance significative et la seule autre raison pour laquelle vous pourriez faire est de vous assurer que vous obtenez une valeur de la portée globale (au cas où la valeur a été redéfinie dans la portée actuelle). P> P> globalobject code> n'est pas défini, cela jette une erreur:
En ce qui concerne la performance, je pense que Anthonywjones l'a couvert.
Une utilisation du préfixe de la fenêtre est de faire explicitement quelque chose disponible en dehors de la portée actuelle. Si vous écriviez du code dans une fonction d'auto-invocation pour éviter de polluer la portée globale, mais il y avait quelque chose à l'intérieur de ce que vous avez voulu faire à l'échelle mondiale, vous pouvez faire quelque chose comme ce qui suit: P>
(function(){ function foo(){ //not globally available } function bar(){ //not globally available } window.baz = function(){ //is globally available foo(); bar(); }; })();
Baz = Fonction () {/ * ... * /} code> fait la même chose, et non, Anthonywjones ne l'a pas couvert. La norme garantit une prestation de performance mesurable (pas seulement dans JS, mais également dans des langues comme Lua), en raison de la fonctionnalité des étendues.
alerte est un mauvais exemple, car il est typiquement appelé qu'une seule fois et cela n'a pas d'importance (généralement) combien de temps il faut pour afficher.