Maison > interface Web > js tutoriel > Comment récupérer des noms de propriétés hérités non énumérables en JavaScript ?

Comment récupérer des noms de propriétés hérités non énumérables en JavaScript ?

Linda Hamilton
Libérer: 2024-11-09 04:23:02
original
189 Les gens l'ont consulté

How Do You Retrieve Non-Enumerable Inherited Property Names in JavaScript?

Récupération des noms de propriétés héritées non énumérables en JavaScript

En JavaScript, l'accès aux propriétés des objets est essentiel pour la manipulation des objets. Bien qu'il existe diverses méthodes pour récupérer des propriétés, chacune se concentre sur des types de propriétés spécifiques. Cela pose un défi lorsque l'on tente d'accéder aux propriétés non énumérables et non propres d'un objet.

Comprendre les types de propriétés

Les propriétés JavaScript peuvent être classées en trois types :

  • Propriétés propres :Définies directement sur l'objet lui-même.
  • Propriétés héritées :Héritées de la chaîne de prototypes de l'objet.
  • Propriétés énumérables : Répertoriées lors de l'utilisation d'Object.keys() ou d'une boucle for...in.
  • Propriétés non énumérables : Non incluses dans le résultats de Object.keys() ou d'une boucle for...in.

Le défi

Le problème survient lors de la tentative de récupération d'objets non énumérables, propriétés non propres d'un objet. Les méthodes conventionnelles comme Object.keys() et les boucles for...in ne fourniront pas ces propriétés.

La solution : parcourir la chaîne de prototypes

Pour récupérer des non- propriétés énumérables et non propres, une fonction personnalisée peut être créée qui traverse la chaîne de prototypes de l'objet. La fonction utilise Object.getOwnPropertyNames() pour récupérer les propriétés non énumérables, y compris celles héritées de la chaîne de prototypes.

Exemple de fonction

function getAllProperties(obj) {
  var allProps = [];
  var curr = obj;

  do {
    var props = Object.getOwnPropertyNames(curr);
    props.forEach(function(prop) {
      if (allProps.indexOf(prop) === -1) {
        allProps.push(prop);
      }
    });
  } while ((curr = Object.getPrototypeOf(curr)));

  return allProps;
}

console.log(getAllProperties([1, 2, 3]));
Copier après la connexion

Sortie :

[ "0", "1", "2", "length" ]
Copier après la connexion

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!

source:php.cn
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