La méthode Object.getOwnPropertyDescriptors() renvoie l'ensemble des descripteurs des propriétés propres d'un objet donné.

Syntaxe

Object.getOwnPropertyDescriptors(obj)

Paramètres

obj
L'objet dont on souhaite connaître les descripteurs des propriétés.

Valeur de retour

Un objet qui contient tous les descripteurs des propriétés propres de l'objet passé en paramètre. S'il n'y aucune propriété, cela sera un objet vide.

Description

Cette méthode permet d'examiner de façon précise les différentes propriétés directement rattachées à un objet. Une propriété JavaScript se définit par un nom (une chaîne de caractères) ou un symbole (Symbol) et un descripteur. Vous pouvez trouver de plus amples informations sur les types de descripteurs et sur leurs attributs sur la page de Object.defineProperty().

Un descripteur de propriété est un enregistrement qui possède les attributs suivants :

value
La valeur associée à la propriété (uniquement pour les descripteurs de données).
writable
true si et seulement si la valeur associée à la propriété peut être changée (uniquement pour les descripteurs de données).
get
Une fonction qui est utilisée comme accesseur pour la propriété ou undefined s'il n'existe pas de tel accesseur (uniquement pour les descripteurs d'accesseur/mutateur).
set
Une fonction qui est utilisée comme mutateur pour la propriété ou undefined s'il n'existe pas de tel mutateur (uniquement pour les descripteurs d'accesseur/mutateur).
configurable
true si et seulement si le type de descripteur peut être changé et si la propriété peut être supprimée de l'objet correspondant.
enumerable
true si et seulement si cette propriété est listée lorsqu'on énumère les propriétés de l'objet correspondant.

Exemples

Créer un clone

La méthode Object.assign() ne copiera que les propriétés propres et énumérables d'un objet source vers un objet cible. On peut donc utiliser cette méthode avec Object.create() afin de réaliser une copie « plate » entre deux objets inconnus :

Object.create(
  Object.getPrototypeOf(obj), 
  Object.getOwnPropertyDescriptors(obj) 
);

Créer une sous-classe

Pour créer une sous-classe, généralement, on définit la sous-classe et on définit son prototype comme étant une instance de la classe parente. Enfin on définit les propriétés de cette nouvelle sous-classe.

function superclass() {};
superclass.prototype = {
  // on définit les méthodes et propriétés
  // de la classe parente
};

function subclass() {};
subclass.prototype = Object.create(
  superclass.prototype,
  Object.getOwnPropertyDescriptors({
  // on définit les méthodes et propriétés
  // de la sous-classe
}));

Spécifications

Spécification État Commentaires
ECMAScript Latest Draft (ECMA-262)
La définition de 'Object.getOwnPropertyDescriptors' dans cette spécification.
Projet  
ECMAScript 2017 (ECMA-262)
La définition de 'Object.getOwnPropertyDescriptors' dans cette spécification.
Standard Définition initiale.

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
Support simpleChrome Support complet 54Edge Support complet 15Firefox Support complet 50IE Aucun support NonOpera Support complet 41Safari Support complet 10WebView Android ? Chrome Android Support complet 54Edge Mobile Support complet OuiFirefox Android Support complet 50Opera Android ? Safari iOS ? Samsung Internet Android Support complet 6.0nodejs Support complet 7.0.0
Support complet 7.0.0
Support complet 6.5.0
Désactivée
Désactivée From version 6.5.0: this feature is behind the --harmony runtime flag.

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight
Dernière mise à jour par : SphinxKnight,