La méthode Object getOwnPropertyDescriptors ()

Découvrez tout sur la méthode JavaScript getOwnPropertyDescriptors () de l'objet Object

Cette méthode renvoie tous les descripteurs de propriétés propres (non hérités) d'un objet.

Object.getOwnPropertyDescriptors(obj)accepte un objet et renvoie un nouvel objet qui fournit une liste des descripteurs.

Exemple:

const dog = {}
Object.defineProperties(dog, {
  breed: {
    value: 'Siberian Husky'
  }
})
Object.getOwnPropertyDescriptors(dog)
/*
{
  breed: {
    value: 'Siberian Husky',
    writable: false,
    enumerable: false,
    configurable: false
  }
}
*/

Il existe un cas d'utilisation qui rend cette propriété très utile. ES2015 nous a donnéObject.assign(), qui copie toutes les propriétés propres énumérables d'un ou plusieurs objets, et renvoie un nouvel objet. Cependant, cela pose un problème, car il ne copie pas correctement les propriétés avec des attributs autres que ceux par défaut.

Si un objet par exemple n'a qu'un setter, il n'est pas correctement copié dans un nouvel objet, en utilisantObject.assign(). Par exemple avec cet objet:

const person1 = {
  set name(newName) {
    console.log(newName)
  }
}

Cette tentative de copie ne fonctionnera pas:

const person2 = {}
Object.assign(person2, person1)

Mais cela fonctionnera et copiera correctement le setter:

const person3 = {}
Object.defineProperties(person3,
  Object.getOwnPropertyDescriptors(person1))

Comme vous pouvez le voir avec un test de console:

person1.name = 'x'
"x"

person2.name = ‘x’

person3.name = ‘x’ “x”

person2manque le passeur, il n'a pas été recopié.

La même limitation s'applique aux objets de clonage superficiel avecObject.create().

Téléchargez mon gratuitManuel du débutant JavaScript


Plus de tutoriels js: