Oii Daniel, tudo bem?
O que tá acontecendo no seu caso é uma característica de como o JavaScript lida com propriedades herdadas através do protótipo. Quando você cria um novo objeto estudante
usando a função construtora User
com new User()
, esse objeto estudante
é criado com um protótipo que é o objeto User.prototype
. Isso significa que estudante
não possui diretamente a propriedade perfil
, mas sim herda essa propriedade de seu protótipo.
Quando você faz console.log(estudante)
, o JavaScript mostra apenas as propriedades próprias do objeto estudante
, que, no seu caso, tá vazio porque não foram definidas propriedades diretamente nele, apenas no protótipo. Por isso, você vê User {}
como saída, indicando um objeto User
vazio.
Por outro lado, quando você acessa estudante.perfil
, o JavaScript procura essa propriedade no objeto estudante
. Como ela não tá diretamente nele, o JavaScript então procura no protótipo de estudante
, que é User.prototype
, onde encontra a propriedade perfil
definida como 'estudante'. Assim, console.log(estudante.perfil)
retorna 'estudante'.
Esse comportamento destaca uma das poderosas características da programação orientada a objetos em JavaScript, que é a capacidade de herdar propriedades e métodos de um objeto protótipo, permitindo reutilização e compartilhamento de comportamentos.
Espero que essa explicação tenha esclarecido sua dúvida sobre por que a propriedade perfil
não aparece quando você loga o objeto estudante
diretamente, mas é acessível através de estudante.perfil
. É tudo uma questão de como o JavaScript trata propriedades próprias versus propriedades herdadas do protótipo.
Um abraço e bons estudos.