JavaScript : Le descripteur de propriété
#1 Lire le descripteur d'une propriété d'un objet avec Object.getOwnPropertyDescriptor()
Lorsque vous créez une propriété dans un objet, il se trouve qu'elle a un certain nombre de caractéristiques. Ces caractéristiques sont stockées dans un descripteur de propriété. Il y a des valeurs par défaut.
Le descripteur de propriété se présente sous la forme d'un objet dans lequel on trouve une propriété pour chaque caractéristique de la propriété initiale.
Ci-dessous, je crée une propriété, puis je récupère son descripteur au moyen de la méthode getOwnPropertyDescriptor
. Ensuite, je visualise ses caractéristiques par défaut avec un console.dir()
.
Le descripteur de propriété contient donc par défaut les propriétés suivantes configurable
, enumerable
, value
et writable
. Chaque propriété a évidemment une valeur. On va regarder de plus près ce que ces propriétés veulent dire.
#2 Signification des propriétés contenues dans le descripteur d'une propriété
configurable
: sitrue
, le descripteur de la propriété peut être modifié et la propriété peut être supprimée. Sifalse
, nous ne pouvons faire aucune de ces choses.enumerable
: sitrue
, la propriété apparaît lors une bouclefor in
sur l'objet.writable
: sitrue
, la valeur de la propriété peut être modifiée à l'aide d'une affectation.
#3 Modifier une propriété avec Object.defineProperty()
Vous devez utiliser Object.defineProperty
pour créer ou modifier les caractéristiques d'une propriété. Ci-dessous, je passe l'instance de l'objet en premier argument de Object.defineProperty
puis le nom de la propriété (* attention en tant que chaîne de caractères), puis enfin en troisième argument un objet. C'est cet objet qui contient la liste des caractéristiques de la propriété. Ici, je ne fais que changer la valeur de enumerable
en la passant à false
.
#4 Créer complètement une propriété avec Object.defineProperty()
Vous pouvez utiliser Object.defineProperty
pour créer complètement une propriété tout en configurant précisément son descripteur. Ci-dessous, je crée la propriété property
sur l'instance obj
et je configure ses valeurs pour value
, configurable
, writable
, enumerable
.