Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro em construtor super

Olá, espero que você esteja bem,

Estou com o erro abaixo ao tentar rodar o arquivo index,js

o Node retorna o seguinte erro:

"Must call super constructor in derived class before accessing 'this' or returning from derived constructor"

Abaixo minhas Classes criadas:

Classe ContaSalario

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

export class ContaSalario extends Conta{
    constructor(cliente){
        super(0,this.cliente, 100)
    }

Classe Conta

export class Conta {
    //Classe abstrata
    constructor ( saldoInicial, cliente, agencia){
        if (this.constructor == Conta){
            throw new Error("Você não deveria instanciar um objeto do tipo Conta, pois ela é uma classe abstrata.");
        }   
        this._saldo = saldoInicial;
        this._cliente = cliente;
        this._agencia = agencia;

    }


    set cliente(novoValor){
        if(novoValor instanceof Cliente){
            this._cliente = novoValor;
        }
    }

    get cliente(){
        return this._cliente;
    }

    get saldo(){
        return this._saldo;
    }

    get agencia(){
        return this._agencia;
    }


    sacar(valor){
        throw new Error("O metodo sacar é abstrato")

    }

    _sacar(valor,taxa){
        const valorSacado = taxa * valor;
        if(this._saldo >= valorSacado){
            this._saldo -= valorSacado;
            return valorSacado;
        }
        return 0;
    }

    depositar(valor){
        if(valor <= 0)
        {
            return;
        } 
        this._saldo += valor;           
    }

    transferir(valor, conta){
        const valorSacado = this.sacar(valor);
        conta.depositar(valorSacado);
    }

    teste(){
        console.log("Metodo Teste da Classe Conta.")

    }

}

Quando não referencio o this.cliente no super o codigo roda.

1 resposta
solução

Oi, Abner, tudo bem?

O super basicamente é usado para fazer chamadas de super no construtor e permite acesso ao métodos pai de outra classe, ou seja, um construtor usa a palavra-chave super para chamar o construtor de uma classe pai. Isso é realmente importante porque em classes derivadas, super () deve ser chamado antes que você possa usar this. Deixar isso de fora causará um erro de referência.

Você está chamando o this para cliente dentro do super e está causando esse erro de referência, remova-o, deixando assim:

export class ContaSalario extends Conta{
    constructor(cliente){
        super(0, cliente, 100)
    }

Assim, o erro de referência não ocorre.

Para saber mais: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/super

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software