1
// 1. Declaración de Clase en ES6
class Producto {
// Campos públicos de clase (Class Fields - ES2022)
activo = true;
fechaRegistro = new Date().toLocaleDateString();
// Método Constructor Único
constructor(id, nombre, precio, stock = 0) {
if (precio < 0) {
throw new RangeError("El precio no puede ser negativo.");
}
this.id = id;
this.nombre = nombre;
this.precio = precio;
this.stock = stock;
}
// Métodos de Instancia (automáticamente colocados en Producto.prototype)
calcularIva(tasa = 0.21) {
return parseFloat((this.precio * tasa).toFixed(2));
}
obtenerPrecioTotal() {
return parseFloat((this.precio + this.calcularIva()).toFixed(2));
}
actualizarStock(unidades) {
this.stock += unidades;
console.log(`📦 Stock de [${this.nombre}] actualizado a: ${this.stock} unidades.`);
}
describir() {
return `[#${this.id}] ${this.nombre} | Precio: $${this.precio.toFixed(2)} (+IVA: $${this.obtenerPrecioTotal()}) | Stock: ${this.stock}`;
}
}
// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
console.log("=== CREACIÓN DE INSTANCIAS CON ES6 ===");
const laptop = new Producto(1, "MacBook Air M2", 1199.00, 10);
const teclado = new Producto(2, "Teclado Mecánico Keychron", 89.50, 25);
console.log(laptop.describir());
console.log(teclado.describir());
console.log("\n=== OPERACIONES ===");
laptop.actualizarStock(-2); // Venta de 2 unidades
teclado.actualizarStock(15); // Reposición de inventario
console.log("\n=== VERIFICACIÓN DE PROTOTIPOS BAJO EL CAPÓ ===");
console.log("¿describir() reside en Producto.prototype?:", Producto.prototype.hasOwnProperty('describir')); // true!
console.log("¿laptop es instancia de Producto?:", laptop instanceof Producto); // true
Haz clic para editar este código