La méthode Object.getOwnPropertyDescriptor()
renvoie un descripteur de la propriété propre d'un objet (c'est-à-dire une propriété directement présente et pas héritée via la chaîne de prototypes).
Syntaxe
Object.getOwnPropertyDescriptor(obj, prop)
Paramètres
obj
- L'objet sur lequel on cherche la propriété.
prop
- Le nom de la propriété dont on souhaite avoir la description.
Valeur de retour
Un descripteur de propriété de la propriété souhaitée si elle existe pour l'objet en question, sinon undefined
.
Description
Cette méthode permet d'avoir des informations précises sur une propriété. Une propriété JavaScript est un nom (qui est une chaîne de caractères) associé à un descripteur. Voir la page Object.defineProperty
pour plus d'informations sur les descripteurs de propriétés.
Un descripteur de propriété est un enregistrement qui dispose des attributs suivants :
value
- La valeur associée à la propriété (pour les descripteurs de données uniquement).
writable
true
si et seulement si la valeur associée à la propriété peut être changée (pour les descripteurs de données uniquement).get
- Une fonction qui joue le rôle d'accesseur (getter) pour la propriété ou
undefined
s'il n'y a pas d'accesseur (pour les descripteurs d'accesseurs uniquement). set
- Une fonction qui joue le rôle de mutateur (setter) pour la propriété ou
undefined
s'il n'y a pas de tel mutateur (pour les descripteurs d'accesseurs uniquement). configurable
true
si et seulement si le type du descripteur peut être changé et si la propriété peut être supprimée de l'objet.enumerable
true
si et seulement si la propriété doit apparaître lors d'une énumération des propriétés de l'objet.
Exemples
var o, d; o = { get toto() { return 17; } }; d = Object.getOwnPropertyDescriptor(o, "toto"); // d is { configurable: true, enumerable: true, get: /*l'accesseur*/, set: undefined } o = { truc: 42 }; d = Object.getOwnPropertyDescriptor(o, "truc"); // d is { configurable: true, enumerable: true, value: 42, writable: true } o = {}; Object.defineProperty(o, "machin", { value: 8675309, writable: false, enumerable: false }); d = Object.getOwnPropertyDescriptor(o, "machin"); // d is { value: 8675309, writable: false, enumerable: false, configurable: false }
Notes
Pour ES5, si le premier argument de la méthode n'est pas un objet (mais une valeur d'un autre type), une exception TypeError
sera levée. Pour ES6, un argument non-objet sera d'abord converti en objet avant d'appliquer la méthode.
Object.getOwnPropertyDescriptor("toto", 0); // TypeError: "toto" n'est pas un objet // code ES5 Object.getOwnPropertyDescriptor("toto", 0); // {configurable:false, enumerable:true, value:"f", writable:false} // code ES6
Spécifications
Spécification | État | Commentaires |
---|---|---|
ECMAScript 5.1 (ECMA-262) La définition de 'Object.getOwnPropertyDescriptor' dans cette spécification. |
Standard | Définition initiale. Implémentée avec JavaScript 1.8.5 |
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'Object.getOwnPropertyDescriptor' dans cette spécification. |
Standard | |
ECMAScript 2017 Draft (ECMA-262) La définition de 'Object.getOwnPropertyDescriptor' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | 5 | 4.0 (2) | 8 | 12 | 5 |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | ? | ? | ? | ? | ? | ? |