Maison  >  Article  >  interface Web  >  Notes d'étude Javascript - Objets (4) : pour les connaissances loop_basic

Notes d'étude Javascript - Objets (4) : pour les connaissances loop_basic

WBOY
WBOYoriginal
2016-05-16 16:43:201133parcourir

Premier exemple :

// Poisoning Object.prototype
Object.prototype.bar = 1;

var foo = {moo: 2};
for(var i in foo) {
 console.log(i); // prints both bar and moo
}

Nous devons prêter attention à deux points ici. Premièrement, la boucle for in ignorera l'attribut énumérable défini sur false. Par exemple, la propriété length d'un tableau. La seconde est que, comme for in traversera toute la chaîne de prototypes, lorsque la chaîne de prototypes est trop longue, cela affectera les performances.

Enumerable est un mot très inconnu en fait, on peut difficilement trouver son ombre en JavaScript, et il est en fait emprunté par l'auteur à Ruby. Le but de la création d'un énumérable n'est pas de l'utiliser indépendamment, mais de l'utiliser de manière "mixte". De nombreuses méthodes dans Prototype utilisent l'énumérable de manière mixte, on peut donc dire qu'il s'agit de la pierre angulaire du prototype. Je ne le présenterai pas en détail ici. Pour plus de détails, veuillez vous référer à - Enumerable.
Puisque nous ne pouvons pas modifier le comportement de la boucle for in elle-même, nous ne pouvons utiliser que d'autres méthodes pour filtrer les propriétés que nous ne souhaitons pas voir apparaître dans la boucle. Via "Javascript Learning Notes - Objects (3) : hasOwnProperty<.>》Nous savons que la méthode hasOwnProperty peut faire cela.

Utiliser le filtre hasOwnProperty

Toujours en utilisant l'exemple précédent :

// Poisoning Object.prototype
Object.prototype.bar = 1;

var foo = {moo: 2};
 for(var i in foo) {
 if (foo.hasOwnProperty(i)) {
  console.log(i);
 }
 }
C'est la seule façon correcte de l'écrire puisque nous avons utilisé la méthode hasOwnProperty, seul moo est affiché cette fois. Si la méthode hasOwnProperty n'est pas applicable, une erreur se produira lors de l'extension de Object.prototype.

De nombreux frameworks choisissent désormais d'étendre les méthodes d'Object.prototype, donc lorsque nous utiliserons ces frameworks, nous rencontrerons des problèmes si nous utilisons des boucles for in qui ne sont pas filtrées avec hasOwnProperty.

Résumé

Il est recommandé de développer une bonne habitude de filtrer les propriétés avec hasOwnProperty. Ne faites aucune hypothèse sur l'environnement d'exécution, et que l'objet prototype natif soit étendu ou non.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn