4
respostas

autenticavel.autenticar is not a function

Minha autenticação não está funcionando, e não consigo achar o motivo. Index.html

import { Cliente } from "./Cliente.js";
import { Gerente } from "./Funcionarios/Gerente.js";
import { Diretor } from "./Funcionarios/Diretor.js";
import { SistemaAutenticacao } from "./SitemaDeAtutenticacao.js";

const diretor = new Diretor("Rodrigo", 10000, 123321444555);
diretor.cadastrarSenha("123456");
const gerente = new Gerente("Ricardo", 5000, 12345654789090);
gerente.cadastrarSenha("123");
const cliente = new Cliente("Luiz", 11263867901, "1234");

const gerenteestaLogado = SistemaAutenticacao.login(gerente, "123");
const diretorestaLogado = SistemaAutenticacao.login(diretor, "123456");
const clienteestaLogado = SistemaAutenticacao.login(cliente, "1234")
console.log(gerenteestaLogado)

SistemaAtutenticacao

export class SistemaAutenticacao {
    static login(autenticavel, senha){
        return autenticavel.autenticar(senha);
    }
}

Funcionarios

export class Funcionario {
    constructor(nome, salario, cpf) {
        this._nome = nome;
        this._salario = salario;
        this._cpf = cpf;

        this._bonificacao = 1;
        this._senha;
    }

    autenticar(senha){
        return senha == this._senha;
    }

    cadastrarSenha(senha) {
        this._senha = senha;
    }



}
4 respostas

Oi Lucas, tudo bom?

Você nao postou a classe Gerente.js e Diretor.js, Verifique se essas classes estao extendendo a classe Funcionarios.js

Ficaria mais ou menos assim:

class Diretor extends Funcionario {}
class Gerente extends Funcionario {}

Abraços

Oi Diego, tudo bom? Já havia feito isso e ainda não reconhece a função autenticar.

import { Funcionario } from "./Funcionario.js";

export class Gerente extends Funcionario {
    constructor(nome, salario, cpf) {
        super(nome, salario, cpf);
        this._bonificacao = 1.1;
    }
}
import { Funcionario } from "./Funcionario.js";

export class Diretor extends Funcionario {
    constructor(nome, salario, cpf) {
        super(nome, salario, cpf);
        this._bonificacao = 2;
    }
}

Você tem q colocar o extends nas suas classes, esse é o único jeito de herdar as propriedades da classe pai. Verifique se os caminhos relativos estão corretos.

Eu tentei aqui no meu ambiente local e funcionou corretamente

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Cara, eu estou com um problema parecido com o seu, mas consegui identificar que o problema ocorre ao declarar a const do cliente, se vc fizer no seu index.js da seginte forma, vc provavelmente vai conseguir utilizar o metodo de autenticação para o diretor e para o gerente, mas irá obter o mesmo erro para o cliente.

import { Cliente } from './Cliente.js'
import { Diretor } from './Funcionarios/Diretor.js'
import { Gerente } from './Funcionarios/Gerente.js'
import { SistemaAutenticacao } from './SistemaAutenticacao.js'

const diretor = new Diretor('Rodrigo', 15000, 11122233344)
diretor.cadastrarSenha('123456')
const gerente = new Gerente('Ricardo', 10000, 22233344455)
gerente.cadastrarSenha('123456')
const cliente = new Cliente('Alice', 33344455566, '123456')

const diretorEstaLogado = SistemaAutenticacao.login(diretor, '123456')
const gerenteEstaLogado = SistemaAutenticacao.login(gerente, '123456')
console.log(diretorEstaLogado)
console.log(gerenteEstaLogado)
const clienteEstaLogado = SistemaAutenticacao.login(cliente, '123456')
console.log(clienteEstaLogado)

Ainda estou tentando descobrir o motivo pelo qual não consigo consertar o erro com o cliente da forma como é feito na aula.