El método Object getOwnPropertyDescriptors ()

Descubra todo sobre el método JavaScript getOwnPropertyDescriptors () del objeto Object

Este método devuelve todos los descriptores de propiedades propios (no heredados) de un objeto.

Object.getOwnPropertyDescriptors(obj)acepta un objeto y devuelve un nuevo objeto que proporciona una lista de descriptores.

Ejemplo:

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

Hay un caso de uso que hace que esta propiedad sea muy útil. ES2015 nos dioObject.assign(), que copia todas las propiedades propias enumerables de uno o más objetos y devuelve un nuevo objeto. Sin embargo, hay un problema con eso, porque no copia correctamente las propiedades con atributos no predeterminados.

Si un objeto, por ejemplo, tiene solo un establecedor, no se copia correctamente en un nuevo objeto, usandoObject.assign(). Por ejemplo con este objeto:

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

Este intento de copia no funcionará:

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

Pero esto funcionará y copiará el setter correctamente:

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

Como puede ver con una prueba de consola:

person1.name = 'x'
"x"

person2.name = ‘x’

person3.name = ‘x’ “x”

person2echa de menos el colocador, no fue copiado.

La misma limitación se aplica a los objetos de clonación superficial conObject.create().


Más tutoriales de js: