variável pública e privada


#1

Oi pessoal,

Fiquei com uma dúvida quanto a declaração de variáveis públicas ou privadas quando se usa notação literal de objetos. No exercício em questão eu criei o objeto cashRegister assim:

//Crie o objeto chamado cashRegister
//e inicialize a propriedade total
var cashRegister = {
this.total: 0
};

//Mude a propriedade total usando a notação de ponto
total = 2.99;

E a seguinte mensagem aparece no console:

Oops, tente outra vez. There was a problem with your syntax.
SyntaxError: Unexpected token .

Para poder compilar eu tive que tirar o this do meu atributo total (ou propriedade como queiram) e para modificar total para 2.99 tive que alterar para cashRegister.total =2.99 e deu certo.

Bem, a dúvida é quanto a criação de variáveis públicas e privadas com a notação literal, já que se eu quisesse fazer pela notação de construtores eu teria feito assim:

//Crie o objeto chamado cashRegister
//e inicialize a propriedade total
function cashRegister (){
this.total = 0;
}

cashRegister.total = 2.99;

No entanto, quando fiz desse jeito e testei também tive erro.

Oops, tente outra vez. Defina um objeto chamado 'cashRegister'

Não sei se fui claro na minha pergunta.


#2

O erro "SyntaxError: Unexpected token ." na primeira vez foi que nao da para usar o this. ali porque ele apenas cria, usa ou atualiza valores dentro de metodos ou funçoes de construtor.
E para mudar a propiedade total usando a notação de ponto deveria ser assim:
cashRegister.total = 2.99

E usando a notação de contrutores so funcionou para o codigo mas a lição queria que voçe criase um objeto, eu fiz assim
var cashRegister = new Object()
cashRegister.total = 0
cashRegister.total = 2.99

Para criar uma variavel publica voçe declara ela em qualquer lugar fora de qualquer funçao
e para criar uma variavel privada voçe declara ela dentro de funçoes porque elas so vao funcionar lá

Todas as propiedades de objeto que usam this. sao publicas
se voce quiser que um objeto tenha uma propiedade privada voce deve trocar o this. pelo var
se tiver algo errado me corrija por favor, sou aprendiz tambem
espero ter ajudado