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