Listo (Ctrl + Enter para ejecutar) Bootcamp Fullstack »
app.js
Tab = 4 espacios
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
Vista Previa
Consola Virtual JavaScript