3
respostas

Por que não foi criado no 'admin' um método igual ao criado na constante 'user'?

Não entendi o porquê de não ter sido criado um método na constante 'admin' igual ao criado na constante 'user'.

const user = { 

    nome: "Juliana",
    email: "j@j.com",
    nascimento: "2021/01/01",
    role: "estudante",
    ativo: true,
    exibirInfos: function () { 
        // Esse método foi criado com chave e valor e o valor é uma função anônima
        
        console.log(this.nome, this.email)
    }
}

const admin = { 

    nome: "Mariana",
    email: "m@m.com",
    role: "admin",
    criarCurso() {
        // Não foi usado chave-valor e não tem o termo 'function' como tem na constante 'user'. 
        console.log('Curso criado!');
    }
}
3 respostas

Olá, Diógenes! Tudo bem?

A diferença entre a criação do método na constante 'user' e na constante 'admin' está relacionada às funcionalidades específicas de cada objeto.

No caso da constante 'user', foi criado o método 'exibirInfos', que mostra o nome e o email do usuário. Esse método é relevante para qualquer tipo de usuário, seja ele um estudante, um docente ou um administrador.

Já na constante 'admin', foi criado o método 'criarCurso', que tem a função de criar um curso. Essa funcionalidade é específica para o papel de administrador, e não faz sentido ser aplicada a um estudante ou a um docente.

A ideia da orientação a objetos é justamente reutilizar código e criar métodos e propriedades que sejam pertinentes a cada objeto. No caso do exemplo, o método 'exibirInfos' é comum a todos os usuários, enquanto o método 'criarCurso' é específico para o objeto 'admin'.

É importante destacar que, mesmo que o método 'exibirInfos' não tenha sido criado diretamente no objeto 'admin', ele ainda pode ser acessado por meio da herança de protótipo. No exemplo fornecido, foi utilizado o método 'Object.setPrototypeOf(admin, user)' para definir que 'user' é o protótipo de 'admin'. Dessa forma, o objeto 'admin' herda todas as propriedades e métodos do objeto 'user', incluindo o método 'exibirInfos'.

Espero ter esclarecido sua dúvida! Se tiver mais alguma pergunta, é só me dizer.

Espero ter ajudado, abraços e bons estudos!

Primeiramente, grato pelo retorno!!

Eu creio que não me fiz entender. rs

Os dois são métodos, entendi. O que foi criado no "user" será herdado pelo "admin", entendi também, mas não entendi por que a criação dos métodos foram feita de forma diferentes?

Método criado no user:

  • Esse método foi criado com chave e valor e o valor é uma função anônima
exibirInfos: function () {        
        console.log(this.nome, this.email)
    }

Método criado no admin:

  • Não foi usado chave-valor e não tem o termo 'function' como tem na constante 'user'.
criarCurso() {
        console.log('Curso criado!');
    }

Olá, Diógenes! Tudo ok contigo?

Entendo sua dúvida agora. Vamos esclarecer por que os métodos foram criados de forma diferente nas constantes 'user' e 'admin' no contexto da programação orientada a objetos em JavaScript.

A diferença na criação dos métodos se deve à sintaxe utilizada para definir funções dentro de objetos e à forma como esses métodos são acessados e invocados. Vamos analisar cada um dos exemplos que você forneceu:

Método criado na constante 'user':

const user = {
    nome: "Juliana",
    email: "j@j.com",
    nascimento: "2021/01/01",
    role: "estudante",
    ativo: true,
    exibirInfos: function () {
        console.log(this.nome, this.email)
    }
}

Neste caso, o método 'exibirInfos' é criado como uma propriedade do objeto 'user', onde a chave é 'exibirInfos' e o valor é uma função anônima definida usando a sintaxe 'function () {}'. Isso é uma forma comum de definir métodos em objetos em JavaScript, especialmente em versões mais antigas da linguagem.

Método criado na constante 'admin':

const admin = {
    nome: "Mariana",
    email: "m@m.com",
    role: "admin",
    criarCurso() {
        console.log('Curso criado!');
    }
}

Aqui, o método 'criarCurso' é definido de uma forma mais recente e concisa, introduzida a partir do ECMAScript 6 (ES6). A sintaxe utilizada é chamada de "método de objeto" ou "método abreviado". Essa sintaxe permite definir métodos diretamente dentro do objeto, omitindo a palavra-chave 'function' e os dois pontos (':').

A razão pela qual os métodos foram criados de forma diferente está relacionada à legibilidade do código e às convenções modernas de programação. A sintaxe de método abreviado é mais curta e limpa, tornando o código mais fácil de ler e escrever. Além disso, a partir do ES6, ela se tornou a forma recomendada de definir métodos em objetos, pois é mais consistente com outras linguagens de programação orientada a objetos.

No entanto, é importante observar que a diferença na sintaxe não afeta a funcionalidade dos métodos. Ambos os métodos 'exibirInfos' e 'criarCurso' podem ser chamados da mesma maneira:

user.exibirInfos(); // Chama o método 'exibirInfos' do objeto 'user'
admin.criarCurso(); // Chama o método 'criarCurso' do objeto 'admin'

Além disso, como mencionado pelo instrutor Renan anteriormente, é possível estabelecer herança de protótipo entre os objetos 'user' e 'admin'. Isso significa que o objeto 'admin' pode herdar os métodos e propriedades do objeto 'user' sem a necessidade de duplicação de código. Essa abordagem economiza espaço na memória e segue o princípio da reutilização de código.

Para criar a herança de protótipo entre 'user' e 'admin', você pode usar o seguinte código:

Object.setPrototypeOf(admin, user);

Com isso, o objeto 'admin' terá acesso ao método 'exibirInfos' definido no objeto 'user', mesmo que não tenha sido definido diretamente em 'admin':

admin.exibirInfos(); // Agora 'admin' pode chamar o método 'exibirInfos' herdado de 'user'

Em resumo, a diferença na sintaxe de criação de métodos entre 'user' e 'admin' está relacionada à evolução da linguagem JavaScript e às práticas recomendadas de programação. Ambos os métodos são igualmente funcionais, e você pode escolher a sintaxe que preferir, dependendo das convenções de código da sua equipe e da versão do JavaScript que está sendo utilizada.

Espero que esta explicação tenha esclarecido sua dúvida. Se tiver mais perguntas ou precisar de mais informações, estou à disposição para ajudar.

Abraços e bons estudos!