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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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