1
class UsuarioServicio {
constructor(nombre, rol) {
this.nombre = nombre;
this.rol = rol;
}
describir() {
if (!this || !this.nombre) {
return "❌ ERROR: 'this' es undefined (se perdió el enlace del objeto).";
}
return `✔ [${this.rol.toUpperCase()}] Usuario: ${this.nombre}`;
}
}
const admin = new UsuarioServicio("Carlos Mendoza", "SuperAdmin");
console.log("=== 1. INVOCACIÓN CON ENLACE IMPLÍCITO (CORRECTO) ===");
// Llamado directo a través del objeto (con el punto '.')
console.log(admin.describir());
console.log("\n=== 2. PÉRDIDA DE ENLACE AL EXTRAER LA FUNCIÓN ===");
// Extraemos la referencia del método a una variable suelta:
const funcionSuelta = admin.describir;
// Al invocarla sola sin el punto 'admin.', el motor no sabe quién es 'this':
console.log(funcionSuelta());
console.log("\n=== 3. SIMULACIÓN DE CALLBACK ASÍNCRONO ===");
// Simulamos lo que ocurre en un setTimeout o un event listener:
function ejecutarCallback(callback) {
console.log("Ejecutando callback recibido...");
return callback();
}
console.log(ejecutarCallback(admin.describir)); // ¡Pierde el contexto!
Haz clic para editar este código