Olá Wellington, tudo bem com você?
Peço desculpas pela demora em lhe responder.
Meus parabéns pelo desenvolvimento do código da atividade, fico feliz que tenha compartilhado-o com a comunidade do fórum Alura.
Caso os atributos de um objeto sejam apenas declarados no escopo da classe e não sejam atribuídos no método construtor, quando criarmos um objeto de classe usando a palavra-chave new
os atributos dos objetos receberão o valor indefinido (undefined
) por não ter sido atribuídos no construtor. Usando o código enviado por você, teríamos o seguinte resultado com um exemplo de classe sem a atribuição dos atributos.
Arquivo: Jogador.js
export class Jogador {
static _totalJogadores = 0;
nome;
idade;
constructor(nome, idade) {
Jogador._totalJogadores++;
}
}
Arquivo: index.js
import { Jogador } from './Jogador.js';
const jogador1 = new Jogador('Welliton', 36);
console.log(jogador1);
Resultado
Jogador { nome: undefined, idade: undefined }
No resultado acima é apresentado um jogador (objeto) da classe Jogador
, note que os valores dos atributos são apresentados como undefined
, isso ocorre devido a não declaração dos atributos no construtor da classe.
É recomendado que ao trabalharmos com o construtor (constructor
) os atributos do objeto sejam declarados e atribuídos dentro do construtor, não sendo necessário realizar uma declaração fora de um método. No código abaixo é apresentado um exemplo de declaração e atribuição no método construtor.
Arquivo: Jogador.js
export class Jogador {
static _totalJogadores = 0;
constructor(nome, idade) {
this.nome = nome;
this.idade = idade;
Jogador._totalJogadores++;
}
}
Note que o atributo de classe, que é o atributo declarado após a palavra-chave static
, permaneceu sendo declarado e atribuído fora do método construtor. Os atributos de classe devem ser declarados fora de um método, devido estes pertencerem à classe e não a um objeto que será criado por ela.
Em resumo temos que, se declaramos e atribuímos os atributos no método construtor não será necessário realizar a declaração do atributo fora do método. Já os atributos de classe devem permanecer fora dos métodos da classe.
Espero ter ajudado. Fico à disposição em caso de dúvidas.
Abraços e bons estudos.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!