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?
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