Campos de classe públicos e privados
Várias propostas expandem a sintaxe de classes JavaScript existente com novas funcionalidades. Este artigo explica a nova sintaxe de campos de classe públicos no V8 v7.2 e Chrome 72, assim como a futura sintaxe de campos de classe privados.
Aqui está um exemplo de código que cria uma instância de uma classe chamada IncreasingCounter
:
const counter = new IncreasingCounter();
counter.value;
// registra 'Obtendo o valor atual!'
// → 0
counter.increment();
counter.value;
// registra 'Obtendo o valor atual!'
// → 1
Note que acessar o value
executa algum código (isto é, registra uma mensagem) antes de retornar o resultado. Agora pergunte-se, como você implementaria esta classe em JavaScript? 🤔
Sintaxe de classe ES2015
Veja como IncreasingCounter
poderia ser implementado usando a sintaxe de classe ES2015:
class IncreasingCounter {
constructor() {
this._count = 0;
}
get value() {
console.log('Obtendo o valor atual!');
return this._count;
}
increment() {
this._count++;
}
}
A classe instala o getter value
e um método increment
no protótipo. Mais interessantemente, a classe tem um construtor que cria uma propriedade de instância _count
e define seu valor padrão como 0
. Atualmente, costumamos usar o prefixo de sublinhado para indicar que _count
não deve ser usado diretamente pelos consumidores da classe, mas isso é apenas uma convenção; não é realmente uma propriedade “privada” com semântica especial aplicada pela linguagem.