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 defectotrue. - [[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