regresar a la lección

Aplicación parcial para inicio de sesión

importancia: 5

La tarea es una variante un poco más compleja de Arreglar una función que perdió "this".

El objeto user fue modificado. Ahora, en lugar de dos funciones loginOk/loginFail, tiene una sola función user.login(true/false).

¿Qué deberíamos pasar a askPassword en el código a continuación, para que llame a user.login(true) como ok y user.login(false) como fail?

function askPassword(ok, fail) {
  let password = prompt("Password?", '');
  if (password == "rockstar") ok();
  else fail();
}

let user = {
  name: 'John',

  login(result) {
    alert( this.name + (result ? ' logged in' : ' failed to log in') );
  }
};

askPassword(?, ?); // ?

Sus cambios solo deberían modificar el fragmento resaltado.

  1. Utilice una función wrapper (envoltura), de tipo arrow (flecha) para ser conciso:

    askPassword(() => user.login(true), () => user.login(false));

    Ahora obtiene user de variables externas y lo ejecuta de la manera normal.

  2. O cree una función parcial desde user.login que use user como contexto y tenga el primer argumento correcto:

    askPassword(user.login.bind(user, true), user.login.bind(user, false));