Antes do suporte nativo a campos privados, uma maneira comum de alcançar o encapsulamento era usando WeakMap
para armazenar dados privados.
javascriptCopiar código
const _nome = new WeakMap();
const _idade = new WeakMap();
class Pessoa {
constructor(nome, idade) {
_nome.set(this, nome);
_idade.set(this, idade);
}
falar() {
console.log(`Meu nome é ${_nome.get(this)} e tenho ${_idade.get(this)} anos`);
}
getNome() {
return _nome.get(this);
}
setNome(nome) {
_nome.set(this, nome);
}
getIdade() {
return _idade.get(this);
}
setIdade(idade) {
_idade.set(this, idade);
}
}
const pessoa = new Pessoa('João', 25);
pessoa.falar(); // Meu nome é João e tenho 25 anos
console.log(pessoa.getNome()); // João
pessoa.setNome('Carlos');
console.log(pessoa.getNome()); // Carlos
Para ilustrar o conceito de encapsulamento em Node.js, podemos aprimorar o exemplo da função construtora Pessoa
para utilizar variáveis privadas e métodos públicos. Em JavaScript, uma forma comum de criar variáveis privadas é usando closures dentro da função construtora.
Closures (ou "clausuras") são um conceito fundamental em JavaScript. Quando você define uma função dentro de outra função, a função interna (closure) tem acesso às variáveis e parâmetros da função externa, mesmo após a execução da função externa ter terminado.
#
):
WeakMap
.