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
Mary-Kate Olsenoriginal
2024-12-09 13:40:15631parcourir

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

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

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:
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