Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

SyntaxError: Private field '#bonificacao' must be declared in an enclosing class.

Criei as classes Funcionario e Diretor, sendo Gerente herdeira(filha) de Funcionários, mas ao instanciar um objeto Diretor obtive o seguinte erro: SyntaxError: Private field '#bonificacao' must be declared in an enclosing class.

Substitui os "#" utilizado nos atributos privados por "_" e funcionou. Os atributos privados com "#" não são herdados? Alguél sabe a razão para que nã funcione?

Segue abaixo as classes em questão:

// index.js
import { Funcionario } from "./funcionario/Funcionario.js";
import { Gerente } from "./funcionario/Gerente.js";
import { Diretor } from "./funcionario/Diretor.js";

const diretor = new Diretor(11122233345, "Roberto", 2000);
export class Funcionario {
    #bonificacao = 1;
    #cpf;
    #nome;
    #salario;
    #senha;

    constructor(cpf, nome, salario) {
        this.#cpf = cpf;
        this.#nome = nome;
        this.#salario = salario;
        if (this.constructor == Funcionario)
            throw new Error(
                "Não é permitida a instanciação da classe Funcionario diretamente."
            );
    }

    get senha() {
        return this.#senha;
    }

    cadastrarSenha(senha) {
        this.#senha = senha;
    }
}
import { Funcionario } from "./Funcionario.js";

export class Diretor extends Funcionario {
    constructor(cpf, nome, salario) {
        super(cpf, nome, salario);
        this.#bonificacao = 2;
    }
}
1 resposta
solução!

Fala ai Luan, tudo bem? Campos privados podem apenas serem usados pela própria classe que o definiu, ele não pode ser herdado para classes filhas.

Nesse caso, para que fosse possível a classe filha acessar o campo, o mesmo teria que ser protected ao invés de private, mas, ainda não temos essa funcionalidade de forma nativa no JavaScript.

Espero ter ajudado.