3
respostas

Tem outro erro não?

Além de colocar o atributo _totalJogadores para estático o construtor também deveria estar como Jogador._totalJogadores++; não? Da seguinte forma

class Jogador{

    //Código omitido
   static  _totalJogadores = 0;

    constructor(){
        Jogador._totalJogadores++;
    }
}

new Jogador();
new Jogador();
new Jogador();
new Jogador();
new Jogador();

console.log(Jogador._totalJogadores); //o console me mostra 5
3 respostas

Bom dia!

Não é necessário no construtor, pois a variável já é um atributo de jogador. Então, não é necessário referenciar a classe à qual ele pertence.

Se você for consumir a variável fora da classe, ai sim vai precisar colocar o nome da classe, na forma como feito no console.

Bons estudos!

Ae Thiago, eu também imaginei que por estar na classe, o atributo estático não precisaria de referência. Mas eu testei aqui, e realmente, no construtor, eu preciso colocar (seguindo o exemplo do Hiago) :

constructor(){ Jogador._totalJogadores++; }

Senão acusa um ReferenceError quando for rodar

Sim, exatamente o que você disse Leo eu antes eu tentei fazer algo como

class Jogador{

    //Código omitido
   static  _totalJogadores = 0;

    constructor(){
        this._totalJogadores++;
        console.log(_totalJogadores);
    }
}

new Jogador();
new Jogador();
new Jogador();
new Jogador();
new Jogador();

Mas dá erro de referência, obrigatoriamente eu teria que fazer constructor(){ Jogador._totalJogadores++; }, até mesmo com um getter eu teria um erro

class Jogador{

    //Código omitido
   static  _totalJogadores = 0;

    constructor(){
        this._totalJogadores++;

    }
get totalJogadores(){
    return this._totalJogadores;
};
}

new Jogador();
new Jogador();
new Jogador();
new Jogador();
new Jogador();
console.log(Jogador._totalJogadores);//mostra zero

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