Creación de Objetos y Descriptores de Propiedades en JavaScript: Guía Técnica

Introducción a la Creación de Objetos y Control de Propiedades

En JavaScript, los objetos se pueden crear de varias maneras, y los descriptores de propiedades permiten definir el comportamiento de sus atributos. Este artículo detalla los métodos comunes y el uso de descriptores.

Métodos para Crear Objetos

1. Uso de Literales de Objetos

Se definen directamente con pares clave-valor en el código:


let producto = {
  nombre: "Laptop",
  precio: 999.99
};

2. Funciones Constructoras con new

Se crean instancias mediante funciones constructoras:


function Vehiculo(marca, modelo) {
  this.marca = marca;
  this.modelo = modelo;
}
let miCoche = new Vehiculo("Toyota", "Corolla");

3. Declaraciones de Clase (ES6)

La sintaxis moderna de clases permite una estructura más clara:


class Dispositivo {
  nivelBateria = 100;
  constructor(tipo) {
    this.tipo = tipo;
  }
}
let movil = new Dispositivo("Smartphone");
// movil.nivelBateria es 100 por defecto

Descriptores de Propiedades: Controalndo Atributos

Cada propiedad de un objeto tiene atributos ocultos (descriptores de datos) que se pueden configurar con Object.defineProperty():

  • [[Value]]: Valor real de la propiedda, por defecto undefined.
  • [[Writable]]: Indica si el valor puede modificarse, por defecto true.
  • [[Enumerable]]: Determina si aparece en bucles como for-in, por defecto true.
  • [[Configurable]]: Permite eliminar o redefinir la propiedad, por defecto true.

Ejemplo: Propiedad No Modificable

Configurar una propiedad para que su valor no pueda cambiarse:


let configuracion = { tema: "oscuro" };

Object.defineProperty(configuracion, "idSesion", {
  value: "abc123",
  writable: false,    // Impide modificaciones
  enumerable: true,   // Visible en iteraciones
  configurable: true  // Permite redefinición futura
});

configuracion.idSesion = "xyz456"; // Sin efecto (en modo estricto lanza error)
console.log(configuracion.idSesion); // "abc123"

Aplicaciones Prácticas

Ocultar propiedades internas: Usar enumerable: false para no exponer datos internos en iteraciones.


Object.defineProperty(sistema, "claveInterna", {
  value: "dato-sensible",
  enumerable: false
});

Proteger propiedades críticas: Evitar eliminación o redefinición con configurable: false.


Object.defineProperty(usuario, "identificador", {
  value: 5001,
  configurable: false
});

Extensión con Proxy

El objeto Proxy permite interceptar operaciones en un objeto, como lecturas o escrituras:


const objetivo = { clave: 42 };
const interceptor = {
  get(destino, propiedad) {
    return `Acceso a ${propiedad}: ${destino[propiedad]}`;
  }
};
const proxy = new Proxy(objetivo, interceptor);

console.log(proxy.clave); // Salida: Acceso a clave: 42

Etiquetas: JavaScript objetos Descriptores de Propiedades ES6 proxy

Publicado el 7-9 17:22