Objetos

Jose Lopez
4 min readJul 10, 2017

--

Los Objetos son muy importantes en cualquier lenguaje de programación y más aun en JavaScript que casi todo es un Objeto, en JavaScript se usan los Objetos como estructuras de datos, colección de propiedad-valor o también llamados en otros lenguajes como “Hashes”, similar a los vectores, en este post vamos a ver que podemos hacer con los Objetos y las diferencias a un vector.

Creando

Los Objetos se pueden crear de tres formas: con el constructor global new Object, con el método Object.create() (desde EcmaScript5) y de forma literal {}.

en los Objetos podemos agregar cadenas de carácteres, números, y hasta funciones. La forma más recomendada para crear Objetos es la literal {}.

Accediendo

Para Obtener un valor de una propiedad en un Objeto debemos acceder a este.

Borrando

Para borrar una propiedad de un Objeto usamos el operador delete antes de acceder a este.

El operador ‘propiedad’ in objeto verifica si una propiedad esta en un Objeto, devuelve true si esta de lo contrario devuelve false.

Enumerando

Similar a los vectors, los Objetos también son enumerados con un bucle, en este caso for..in, este bucle toma una variable como llave para recorrer el Objeto, el nombre del Objeto a recorrer y su respectiva sentencia.

Atributos de Propiedades

Como hemos visto una propiedad en un Objeto tiene un atributo llamado valor (value) que por defecto es el que muestra el objeto, pero también existen otro atributos a parte del valor, de este modo podemos ver los atributos de las propiedades:

el método Object.getOwnPropertyDescriptor() toma dos argumentos: el primero es el objeto y el segundo es la propiedad, este método nos devuelve un objeto con los atributos de la propiedad que especificamos, como vemos a parte del value tenemos writable, enumerable y configurable que por defecto son true, para definir una nueva propiedad o modificar una existente usamos el método Object.defineProperty() este método consta de tres argumentos: el primero un objeto, el segundo la propiedad y el tercero los atributos de la propiedad a modificar, este método nos devuelve un objeto similar a Object.getOwnPropertyDescriptor(). Ahora vamos a ver la funcionalidad de cada atributo en una propiedad.

writable

Si queremos que nuestra propiedad sea de solo lectura modificamos writable a false.

modificamos el atributo writable a false e intentamos modificar la propiedad nombre y falla.

En modo estricto (use strict) nos puede lanzar un error diciendonos que no podemos cambiar la propiedad.

configurable

Mientras configurable sea true podemos modificar y remover nuestra propiedad de lo contrario si es false dispara un error si intentamos remover la propiedad y permite modificar si writable es true.

claramente vemos que podemos modificar la propiedad mientras writable es true pero no podemos remover la propiedad nos devuelve false al intentarlo el operador delete falla porque nosotros hicimos la propiedad no configurable.

Podemos crear propiedades immutables con la combinación de writable y configurable a false quedando asi las propiedades como constantes y que en JavaScript no se declaran constantes por un operador, excepto a partir de EcmaScript6.

enumerable

Si se configura a false no sera permitido enumerar la propiedad con el bucle for..in por ejemplo.

como vemos arriba la propiedad nombre no esta en el enumeración del objeto porque configuramos enumerable a false.

value

Este es el valor de la propiedad, es obvio ya sabemos como declarar valores para las propiedades, no es necesario el método Object.defineProperty() para agregar elvalor de una propiedad solo usamos ese método para configurar sus atributos ocultos.

Prevención de Modificación

Existen tres métodos para Prevenir la modificación de las propiedades:

Evitar Extensiones

Llamando el método Object.preventExtensions() previene agregar nuevas propiedades al Objeto.

agregar una nueva propiedad falla silenciosamente aunque en modo estricto (use strict) dispara un error.

Seal

Llamando el método Object.seal() crea un Objeto sellado, llama internamente a Object.preventExtensions() y configura el atributo configurable a__false__ es decir no podemos agregar nuevas propiedades ni removerlas, aunque si podemos modificar las propiedades.

Freeze

Llamando el método Object.freeze() crea un Objeto congelado, llama internamente a __Object.seal() y configura el atributo writable a false es decir no podemos agregar, modidificar ni remover las propiedades de un objeto, este método es altamente recomendado para declarar Objetos immutables o mejor dicho constantes.

Propiedades de Acceso

Acceder a una propiedad como ya hemos visto (objeto.propiedad) y nos devuelve el valor de la propiedad equivale a un getter igual para modificar la propiedad de un objeto equivale a un setter.

otra manera de utilizar los getters y setters aún más explícito es con el método Object.defineProperty() que ya vimos arriba.

Las propiedades de acceso getters y setters llaman la propiedad oculta ignorando sus atributos (writable, configurable, enumerable).

Conclusión

Los Objetos en JavaScript son sumamente importantes ya que este lenguaje esta basado en ellos y podemos hacer muchas cosas aún más interesantes con los Objetos y sus Herencias de Prototipos que voy a dejar para otro post próximamente, así espero que con este post entiendas a lo que va y la importancia que tienen los Objetos en JavaScript.

--

--