10
votes

Avantage de l'utilisation de «fenêtre» préfixe en JavaScript

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.


1 commentaires

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.


7 Réponses :


9
votes

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 fenêtre 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.

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.


2 commentaires

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.



0
votes

J'imagine que la prestation de performance ici est incroyablement insignifiante au mieux, s'il y en a un du tout.


0 commentaires

0
votes

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 explicitement.


0 commentaires

0
votes

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.


0 commentaires

5
votes

récupéré de Google ( http://www.techotopia.com/index.php/javascript_window_Object ):

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:

window.alert ()
alerte ()

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 )

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.


0 commentaires

13
votes

Ceci est utile lorsque vous essayez de tester les valeurs d'objet globales. Par exemple, si globalobject n'est pas défini, cela jette une erreur: xxx

mais cela ne jette pas une erreur: xxx

De même avec: xxx

et: xxx

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).


0 commentaires

1
votes

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();
    };
})();


1 commentaires

Baz = Fonction () {/ * ... * /} 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.