1
resposta

minha resposta

import { Jogador } from './Jogador.js';

const jogador1 = new Jogador('Welliton', 36);
const jogador2 = new Jogador('Marya', 9);
const jogador3 = new Jogador('Andreza', 13);

console.log(jogador1, jogador2, jogador3);
console.log(Jogador._totalJogadores);
export class Jogador {
  static _totalJogadores = 0;
  nome;
  idade;

  constructor(nome, idade) {
    this.nome = nome;
    this.idade = idade;
    Jogador._totalJogadores++;
  }
}

Uma dúvida, na classe Jogador ja declarei nome e idade, no construtor tem a necessidade de repetir ou vice-versa, ou seja, ja que eu vou criar no construtor esses atributos, eu preciso declara-lo antes?

1 resposta

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!