Listo (Ctrl + Enter para ejecutar) Bootcamp Fullstack »
app.js
Tab = 4 espacios
1
// 1. Catálogo de Habilidades Modulares (Mixins)
const conAtaqueEspada = {
    atacarConEspada() {
        return `⚔️ ${this.nombre} ataca con su espada causando 45 puntos de daño.`;
    }
};

const conLanzamientoHechizo = {
    lanzarFuego() {
        return `🔥 ${this.nombre} lanza una bola de fuego mágica causando 80 puntos de daño.`;
    }
};

const conCuracion = {
    curarAliado(aliado) {
        return `💚 ${this.nombre} cura las heridas de ${aliado.nombre} restaurando 50 HP.`;
    }
};

const conSigilo = {
    ocultarse() {
        return `👥 ${this.nombre} se desvanece en las sombras haciéndose invisible.`;
    }
};

// 2. Clase Base Sencilla
class Personaje {
    constructor(nombre, nivel = 1) {
        this.nombre = nombre;
        this.nivel = nivel;
        this.vida = 100;
    }

    describir() {
        return `[Nivel ${this.nivel}] ${this.nombre} (HP: ${this.vida}/100)`;
    }
}

// 3. Composición de Clases Especializadas con Object.assign
// Un Guerrero solo ataca con espada
class Guerrero extends Personaje {}
Object.assign(Guerrero.prototype, conAtaqueEspada);

// Un Mago lanza hechizos y cura
class MagoBlanco extends Personaje {}
Object.assign(MagoBlanco.prototype, conLanzamientoHechizo, conCuracion);

// Un Paladín es híbrido: Ataca con espada Y sabe curar
class Paladin extends Personaje {}
Object.assign(Paladin.prototype, conAtaqueEspada, conCuracion);

// Un Asesino ataca con espada y tiene sigilo
class Asesino extends Personaje {}
Object.assign(Asesino.prototype, conAtaqueEspada, conSigilo);

// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
const aragorn = new Guerrero("Aragorn", 10);
const gandalf = new MagoBlanco("Gandalf", 20);
const uther   = new Paladin("Uther", 15);

console.log("=== DESCRIPCIÓN DE HÉROES ===");
console.log(aragorn.describir());
console.log(gandalf.describir());
console.log(uther.describir());

console.log("\n=== COMBATE MODULAR (HABILIDADES COMPUESTAS) ===");
console.log(aragorn.atacarConEspada());
console.log(gandalf.lanzarFuego());
console.log(gandalf.curarAliado(aragorn));

// El Paladín disfruta de ambas habilidades sin duplicar código
console.log("\n=== HABILIDADES DEL PALADÍN HÍBRIDO ===");
console.log(uther.atacarConEspada());
console.log(uther.curarAliado(gandalf));
Haz clic para editar este código
Vista Previa
Consola Virtual JavaScript