La propiedad Prototype de un objeto en JavaScript
18 de abril de 2023Qué son las funciones en JavaScript
2 de mayo de 2023Veamos qué es la reflexión en JavaScript. Ya hemos hablado previamente sobre los tipos de datos en JavaScript y como podemos hacer uso de la herencia a través de Prototype en JavaScript. Hoy vamos a amplicar un poco más el trato de los objetos en JavaScript a través de la reflexión.
¿Qué es la reflexión?
La reflexión nos permite examinar y modificar la estructura y el comportamiento de los objetos en tiempo de ejecución. Además, en JavaScript lo hacemos sin conocer previamente su estructura.
¿Por qué es necesaria la reflexión?
En JavaScritp no hay el concepto de clase con el que podemos construir tipos complejos y que podamos conocer su estructura en tiempo de compilación (si JavaScript se compilara). Entonces la reflexión nos permitirá examinar en tiempo de ejecución todos los objetos para validar si tiene o no una determinada propiedad y en función de ello actuar en consecuencia.
La reflexión, incluso nos permite modificar la estructura de los objetos en tiempos de ejecución, agregando o quitando propiedades al objetos. Podemos preguntar si tiene o no una determinada propiedad y si no la tiene, agregarla.
Funciones para usar reflexión
Alguna de las funciones que nos permiten hacer uso de la reflexión son:
Object.keys(objeto)
: devuelve un array con las propiedades enumerables, esto es, que se pueden iterar mediante un for, de un objeto.Object.getOwnPropertyNames(objeto)
: devuelve un array con todas las propiedades (enumerables y no enumerables) de un objeto.Object.getPrototypeOf(objeto)
: devuelve el prototipo del objeto.Object.getOwnPropertyDescriptor(objeto, propiedad)
: devuelve un objeto que describe las características de una propiedad de un objeto, como su valor, si es enumerable, configurable (que se puede o no eliminar) y/o writable.Object.getOwnPropertyDescriptors(objeto)
: devuelve un objeto que contiene todos los descriptores de propiedades del objeto.Object.isExtensible(objeto)
: devuelve un valor booleano que indica si un objeto se puede extender con nuevas propiedades.Object.preventExtensions(objeto)
: evita que se agreguen nuevas propiedades a un objeto.Object.seal(objeto)
: previene la eliminación de propiedades y cambia las propiedades existentes a no configurables en un objeto.Object.freeze(objeto)
: previene la eliminación y modificación de propiedades en un objeto.typeof
: devuelve una cadena que indica el tipo de un objeto (como «object», «function», «string», «number», etc.).constructor
: devuelve una referencia al constructor de un objeto.hasOwnProperty(propiedad)
: devuelve un valor booleano que indica si un objeto tiene una propiedad con un nombre específico.propertyIsEnumerable(propiedad)
: devuelve un valor booleano que indica si una propiedad específica de un objeto es enumerable.isPrototypeOf(objeto)
: devuelve un valor booleano que indica si un objeto es el prototipo de otro objeto.
La reflexión es una de esas propiedades que usamos habitualmente sin saber que lo estamos haciendo. Ya sabes qué es la reflexion en JavaScript. Puedes aprender más en la sección de Desarrollo Web o en la sección de JavaScript.
¡Espero que te haya sido de utilidad!