2009-03-06 5 views
3

Si je veux ajouter une méthode isEmpty à tous les tableaux JavaScript, j'utiliser le code suivantJavaScript cycle de vie de prototype augmentée

Array.prototype.isEmpty = function() { 
    return this.length == 0; 
} 

On suppose ce code est dans un fichier foo.js. Si je veux que isEmpty soit disponible sur toutes les pages d'un site web, devrais-je inclure foo.js dans tous les fichiers HTML? En d'autres termes, les prototypes sont-ils "réinitialisés" chaque fois que l'utilisateur accède à une page différente?

Merci, Don

Répondre

5

Oui, vous wil devez inclure votre code sur chaque chargement de page. Pensez à chaque chargement de page en tant que cycle de compilation/reliure. Tous les différents morceaux de Javascript sur la page sont reliés ensemble et ensuite exécutés comme un programme géant. La prochaine fois qu'une page est chargée, les objets Javascript par défaut commencent à l'état frais.


1. Lié ensemble dans un état de mort cérébrale « chaque morceau de partage de code le même espace de noms global » de la mode

0

oui, http est sans état de sorte que chaque page est chargée séparément. Cependant, ajouter à Array.prototype n'est pas une bonne idée.

Cela signifie que si vous essayez de boucler le cercle, vous pouvez vous mettre dans le pétrin.

+0

Pouvez-vous être un peu plus précis sur la façon dont je peux me faire des ennuis? –

+0

@Don, C'est seulement un problème pour 'for (elem in array) ...', le problème auquel faisait référence @Annan est que car .. dans l'énumération d'un objet inclura toutes les propriétés que vous ajoutez à tous les objets sur le prototype chaîne. Cela dit, vous ne devriez vraiment pas utiliser l'énumération for-in sur un tableau, c'est vraiment inefficace. – olliej

+0

Je n'étais pas au courant des surcharges de performance avec l'utilisation de (in) boucles, c'est bon à savoir. Je les utilise moi-même pour les tableaux car cela semble plus logique et plus facile à lire. – Annan

3

Oui, vous devrez modifier le prototype après chaque chargement de la page

Questions connexes