Estava estudando um pouco sobre o assunto e acabei encontrando uma resposta para minha própria pergunta. Parece que no JavaScript nativo ainda não é possível utilizar modificadores de acesso, mas está sendo discutido e implementado pelo TC39 uma proposta para tais recursos. Salve engano, foi uma decisão do TC39 lançar uma especificação de classes um pouco mais simples para não quebrar a compatibilidade do JavaScript, principalmente com os browsers. Parece que a intenção da galera era verificar se a comunidade iria curtir esse novo recurso para só então irem adicionando novas funcionalidades no decorrer das novas versões. A sintaxe é um pouco estranha, mas quando for finalizado parece que as classes terão modificadores de acesso.
Field declarations
class Counter extends HTMLElement {
x = 0;
clicked() {
this.x++;
window.requestAnimationFrame(this.render.bind(this));
}
constructor() {
super();
this.onclick = this.clicked.bind(this);
}
connectedCallback() { this.render(); }
render() {
this.textContent = this.x.toString();
}
}
window.customElements.define('num-counter', Counter);
Private fields
class Counter extends HTMLElement {
#x = 0;
clicked() {
this.#x++;
window.requestAnimationFrame(this.render.bind(this));
}
constructor() {
super();
this.onclick = this.clicked.bind(this);
}
connectedCallback() { this.render(); }
render() {
this.textContent = this.#x.toString();
}
}
window.customElements.define('num-counter', Counter);