Maison > interface Web > js tutoriel > Comment puis-je étendre en toute sécurité des prototypes de tableaux et d'objets sans rompre les boucles For-In ?

Comment puis-je étendre en toute sécurité des prototypes de tableaux et d'objets sans rompre les boucles For-In ?

Mary-Kate Olsen
Libérer: 2024-12-09 13:40:15
original
706 Les gens l'ont consulté

How Can I Safely Extend Array and Object Prototypes Without Breaking For-In Loops?

Extension des prototypes de tableaux et d'objets sans encombrer les boucles For-In

Lors de l'extension de Array.prototype et Object.prototype avec des méthodes d'assistance, il est Il est crucial de garantir que ces méthodes n'interfèrent pas avec les boucles for-in en apparaissant sous forme de valeurs. Ceci est particulièrement important dans les scénarios où d'autres codes s'appuient sur des boucles for-in pour accéder uniquement aux valeurs.

Évitez les boucles For-In avec des tableaux

La solution idéale est de évitez d'utiliser des boucles for-in avec des tableaux. Utilisez plutôt des méthodes d'itération spécifiques au tableau, telles que .map() et .filter() intégrés. Évitez les boucles for-in dans les fonctions génériques qui peuvent rencontrer à la fois des tableaux et des objets.

Utilisez hasOwnProperty() avec Objects

Si l'utilisation de boucles for-in est inévitable en générique fonctions, utilisez la méthode hasOwnProperty() pour exclure les propriétés héritées du prototype :

for (var prop in anyObj)
    if (Object.prototype.hasOwnProperty.call(anyObj, prop))
        // do something
Copier après la connexion

Propriétés non énumérables dans ECMAScript 5.1

Dans ECMAScript 5.1, vous pouvez définir des propriétés non énumérables à l'aide de Object.defineProperty() :

Object.defineProperty(Array.prototype, "find", {
    enumerable: false,
    writable: true,
    value: function(testFun) {
        // code to find element in array
    }
});
Copier après la connexion

Cela garantit que la méthode "find" n'apparaîtra pas dans le for-in boucles. Cependant, il est important de noter que cette approche n'est pas prise en charge dans les anciens navigateurs. Pensez à utiliser des cales comme ES5-shim pour la compatibilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal