Até onde me lembro dessa parte do curso, o autenticar() não deve retornar o valor da senha, pois isso deixaria a senha exposta. Porém, ele deve apenas validar a senha retornando o valor como true ou false:
// Arquivo Funcionario.js
export class Funcionario{
//constructor
autenticar(senha){
return senha == this._senha;
}
// cadastrarSenha(senha)
}
Perceba que o método autenticar(senha), não retorna o valor de this._senha. Ele apenas compara senha com this._senha e retorna um valor booleano true ou false.
Já a classe SistemaAutenticacao, tem um método estático que permite receber o objeto, no caso um diretor, por exemplo, e a senha digitada por este usuário e, com base nestes valores passados por argumento, consegue pegar o método autenticar() que está lá na classe Funcionario passar para ele a senha e receber se a senha confere ou não. Contudo, o valor da senha não é retornado, apenas se é true ou false.
// Arquivo SistemaAutenticacao.js
class SistemaAutenticacao{
static login(autenticavel, senha){
return autenticavel.autenticar(senha);
}
}
Em index.js, temos
import { SistemaAutenticacao } from "./SistemaAutenticacao.js";
const diretor = new Diretor("Rodrigo", 10000, 12345678900);
diretor.cadastrarSenha("123456");
// perceba que o objeto diretor é passado por login, junto com a senha:
const diretorEstaLogado = SistemaAutenticacao.login(diretor, "123456");
console.log(diretorEstaLogado);