2010-03-24 3 views
3

Je regardais le code pour qunit.pourquoi attacher à la fenêtre [édité]

Ma question est pourquoi voudriez-vous attacher l'objet qunit via la propriété à l'objet fenêtre.

Voici le lien vers le file. Regardez la ligne 11.

Si je regarde un test d'unité utilisant firebug, vous pouvez voir que c'est une propriété de window. Additional: Existe-t-il une référence spécifique pour la meilleure pratique pour déclarer des choses dans des espaces de noms spécifiques?

Répondre

5

Tous les objets globaux (fonctions, variables, etc) sont juste des enfants de fenêtre, c'est le contexte par défaut.

Par exemple: window.jQuery ou window.$

Il peut être plus facile de penser de cette façon ... Où peut-on les mettre? Quand vous faites quelque chose d'aussi général, mieux (ou du moins plus facile) pour les coller à l'endroit par défaut. Si vous faites quelque chose de complexe avec beaucoup de fonctions, d'objets, etc ... mieux de les mettre dans un espace de noms ou dans un objet. Par exemple, tout le code de jQuery est sous jQuery, pas jonché dans la racine du DOM comme window.ajax, à la place c'est jQuery.ajax.

Ceci est beaucoup plus propre, mais peut-être trop pour certains objets, mais c'est une bonne idée de s'assurer qu'ils sont uniques si c'est le cas ... ce que fait qunit, en préfixant leurs objets avec qunit-

+0

donc initialement vous démarrez dans l'espace de noms de fenêtre et lui ajoutez des propriétés? – Gutzofter

+0

donc j'ai vérifié cette même page. et remarqué qu'il y a à la fois window.jQuery et window. $ properties. N'est-ce pas un alias pour l'autre? Est-ce que jQuery a réellement chargé les deux properies ou r les pointeurs vers la même mémoire?Est-il possible de trouver l'adresse mémoire dans firebug? – Gutzofter

+0

@Gutzofter - Oui, 'window. $' Est un alias pour 'window.jQuery' donc votre code peut être plus court, par ex. '$ (selector)' au lieu de 'jQuery (selector)' je ne suis pas sûr d'un moyen de trouver l'adresse mémoire réelle, désolé :) Pour l'autre question, oui vous commencez avec fenêtre, ajouter quelque chose là (comme dire le objet jQuery), vous pouvez ajouter à cela. –

2

L'association de globales comme propriétés de window est une mauvaise pratique. Toutes les variables globales doivent être déclarées en utilisant var. Voici mes raisons:

  1. Il rend beaucoup plus difficile l'analyse statique du code source. Il est impossible de dire en regardant un script quels globals seront déclarés et quand. Les globaux non déclarés créeront ReferenceError s'ils sont utilisés. L'utilisation de var signifie que le levage de JavaScript prend effet et atténue ce problème.
  2. Les globales créées de cette manière sont fondamentalement différentes, et il n'y a pas de moyen facile pour votre code de détecter cela. La plus grande différence est l'absence de [[DontDelete]] sur les globales faites de cette façon, ce qui signifie que vous pouvez supprimer vos variables globales. C'est idiot.
  3. Cela vous tentera de déclarer vos globals en dehors de la portée globale. C'est magie, et mauvaise magie à cela. Ne fais pas ça.

En ce qui me concerne, le fait que window.x = 1 crée une variable globale appelée x est une curiosité intéressante de JavaScript, mais ne doit pas être utilisé ni répondu à. Il y a, cependant, de bonnes raisons d'utiliser les propriétés window, puisque c'est un objet comme les autres (plus ou moins). Dans ce cas, vous devez utiliser le nom complet, par ex. window.onload au lieu de seulement onload.

+0

"Les globals non déclarés créeront des ReferenceErrors s'ils sont utilisés." Correct mais incorrect. Si vous faites benny = undefinedvar; Le type de benny deviendra "indéfini" ... Si vous faites benny = undefinedvar.anothervar; il va lancer parce que vous essayez d'accéder à une propriété de non défini. – Warty

+1

Je suppose que ce n'était pas clair. Par "utilisé", je veux dire utilisé dans une expression, plutôt que d'être utilisé comme lvalue (c'est-à-dire dans une affectation). De même, l'exécution de 'x = y' lance une erreur' ReferenceError: y n'est pas définie'. – bcherry

+0

Quels outils d'analyse statique utilisez-vous spécifiquement? – Gutzofter

Questions connexes