1
// 1. Función Constructora (Solo inicializa estado propio)
function CuentaBancaria(titular, saldoInicial = 0) {
this.titular = titular;
this.saldo = saldoInicial;
this.numeroCuenta = "ES-" + Math.floor(100000 + Math.random() * 900000);
}
// 2. Métodos añadidos al Objeto Prototype (Eficiencia de Memoria)
CuentaBancaria.prototype.depositar = function(monto) {
if (monto <= 0) return;
this.saldo += monto;
console.log(`[${this.titular}] Depósito: +$${monto.toFixed(2)} | Saldo: $${this.saldo.toFixed(2)}`);
};
CuentaBancaria.prototype.retirar = function(monto) {
if (monto > this.saldo) {
console.warn(`[${this.titular}] ⚠️ Fondos insuficientes para retirar $${monto.toFixed(2)}.`);
return false;
}
this.saldo -= monto;
console.log(`[${this.titular}] Retiro: -$${monto.toFixed(2)} | Saldo: $${this.saldo.toFixed(2)}`);
return true;
};
CuentaBancaria.prototype.obtenerResumen = function() {
return `Cuenta #${this.numeroCuenta} | Titular: ${this.titular} | Saldo: $${this.saldo.toFixed(2)}`;
};
// ==========================================
// PRUEBA DE INSTANCIAS Y EFICIENCIA EN RAM
// ==========================================
const cuenta1 = new CuentaBancaria("Valeria Torres", 1000);
const cuenta2 = new CuentaBancaria("Carlos Mendoza", 500);
console.log("=== RESÚMENES DE CUENTA ===");
console.log(cuenta1.obtenerResumen());
console.log(cuenta2.obtenerResumen());
console.log("\n=== OPERACIONES ===");
cuenta1.depositar(300);
cuenta2.retirar(200);
console.log("\n=== PRUEBA DE EFICIENCIA EN MEMORIA ===");
// ¿Ambas cuentas comparten la EXACTA MISMA función en memoria?
const compartenMismoMetodo = (cuenta1.depositar === cuenta2.depositar);
console.log("¿cuenta1.depositar y cuenta2.depositar son la misma función en RAM?:", compartenMismoMetodo); // true!
// Verificación de tipo con instanceof
console.log("¿cuenta1 es instancia de CuentaBancaria?:", cuenta1 instanceof CuentaBancaria); // true
console.log("¿cuenta1 es instancia de Object?:", cuenta1 instanceof Object); // true
Haz clic para editar este código