Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Encapsulamento só existe na teoria em Javascript?

Olá,

Sobre encapsulamento. Mesmo usando a convenção _atributo, se consegue acessar diretamente o valor do atributo. Não existe na prática um mecanismo de encapsulamento em javascript?

4 respostas
solução!

Respondido nos vídeos do curso.

Existe sim, são as variaveis locais de funções. Pensa só: uma variavel local de uma funcao não é acessivel por fora dela. Logo, esta encapsulada. Exemplo besta:

function xpto() {
    var x = 10;
}
console.log(x); // dá erro!
`

Aí vc fala, ok, funcoes beleza, mas tava querendo saber de encapsulamento de propriedades/metodos em um objeto. Pois bem , o truque é o mesmo: usar de alguma forma o escopo local de funcoes pra obter encapsulamento.

Um exemplo:

function ContaCorrente(codigo) {
    this.codigo = codigo; // atributo publico
    var saldo = 0.0; // atributo privado

    // metodos publicos
    this.deposita = function(valor){
         saldo += valor;
         imprime("Depositou R$ " + valor);
    };
    this.mostraSaldo = function(){
         imprime("Saldo: " + saldo);
    };

    // metodos privados
    function imprime(msg) {
         console.log(msg);
    }
}

var c = new ContaCorrente(1234);
console.log(c.codigo);

c.deposita(1000);
c.mostraSaldo();

c.saldo = 17; // tenta mudar o saldo
c.mostraSaldo(); // continua 1000

Agora fiquei confuso. Crio uma função e dela extraio um objeto.

A estratégia é ótima. Mas diferente essa forma de criar objeto. Eu vi apenas a forma class NomeObjeto.

Obrigado Sérgio.

Antes do ES6 não tinha class aí era meio assim que a gente criava "classes" e objetos. A sintaxe nova com class é bem melhor, mais limpa e clara. Toca os estudos do ES6 aí, desculpa te tirar do foco hehehe