Listo (Ctrl + Enter para ejecutar) Bootcamp Fullstack »
app.js
Tab = 4 espacios
1
// 1. Superclase Padre
class Empleado {
    constructor(id, nombre, salarioBase) {
        this.id = id;
        this.nombre = nombre;
        this.salarioBase = salarioBase;
    }

    calcularSueldoNeto() {
        // Deducción estándar del 10% de impuestos
        return parseFloat((this.salarioBase * 0.90).toFixed(2));
    }

    obtenerFicha() {
        return `[ID #${this.id}] ${this.nombre} | Salario Base: $${this.salarioBase.toFixed(2)} | Neto: $${this.calcularSueldoNeto().toFixed(2)}`;
    }
}

// 2. Subclase Hija que Especializa a Empleado
class Director extends Empleado {
    constructor(id, nombre, salarioBase, bonoGestion, departamento) {
        // 1er paso obligatorio: Delegar datos al constructor padre
        super(id, nombre, salarioBase);

        // 2do paso: Inicializar propiedades exclusivas de Director
        this.bonoGestion = bonoGestion;
        this.departamento = departamento;
    }

    // Sobrescritura de Método (Override)
    calcularSueldoNeto() {
        // Reutilizamos el neto del padre y sumamos el bono de gestión
        const sueldoBaseNeto = super.calcularSueldoNeto();
        return parseFloat((sueldoBaseNeto + this.bonoGestion).toFixed(2));
    }

    // Sobrescritura para enriquecer la ficha
    obtenerFicha() {
        return `${super.obtenerFicha()} | 🌟 Rol: Director de ${this.departamento} (Bono: +$${this.bonoGestion})`;
    }

    aprobarPresupuesto(monto) {
        console.log(` Director [${this.nombre}] aprobó presupuesto de $${monto} para ${this.departamento}.`);
    }
}

// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
const desarrollador = new Empleado(101, "Carlos Mendoza", 3000);
const directorTecnico = new Director(102, "Valeria Torres", 6000, 1500, "Ingeniería de Software");

console.log("=== EMPLEADO GENERAL ===");
console.log(desarrollador.obtenerFicha());

console.log("\n=== DIRECTOR (CON HERENCIA Y SUPER) ===");
console.log(directorTecnico.obtenerFicha());
directorTecnico.aprobarPresupuesto(25000);

console.log("\n=== VERIFICACIÓN DE INSTANCIAS ===");
console.log("¿directorTecnico es Director?:", directorTecnico instanceof Director); // true
console.log("¿directorTecnico es Empleado?:", directorTecnico instanceof Empleado); // true (Herencia)
console.log("¿directorTecnico es Object?:", directorTecnico instanceof Object);     // true
Haz clic para editar este código
Vista Previa
Consola Virtual JavaScript