Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Acesso das propriedades do objeto

Porque o acesso as propriedades do objeto mensagemDeErro foi feita por colchetes e não por ponto ? Por pontos conseguiria acessar os dois níveis (o objeto dentro do objeto) ? É uma característica só do javascript ? Segui a formação Front-end e não lembro de ver esse assunto (colchetes).Tem algum curso que fala sobre isso ?

function mostraMensagemDeErro(tipoDeInput, input) {
    let mensagem = ''
    tiposDeErro.forEach(erro => {
        if (input.validity[erro]) {
            mensagem = mensagemDeErro[tipoDeInput][erro]
        }
    })
    return mensagem
}
2 respostas
solução!

Oi David!

Existem dois jeitos de acessar as propriedades de um objeto: acessar pelo operador . ou acessar pela chave da propriedade (o nome da propriedade em string) dentro dos colchetes. Supondo que temos um objeto Pessoa, com as propriedades nome e sobrenome, podemos acessá-las dessas duas maneiras:

pessoa.nome
pessoa["nome"]

e

pessoa.sobrenome
pessoa["sobrenome"]

Quando sabemos com certeza qual propriedade vamos precisar, o operador . é a forma mais fácil e objetiva.

Vamos supor que temos uma função que retorna ou o nome ou o sobrenome da pessoa, podemos criar essa função assim:

function nomeOuSobrenome(pessoa, chave) {
    if(chave== "nome) {
        return pessoa.nome
    }
    else if(chave== "sobrenome") {
        return pessoa.sobrenome
    }
    else return "valor inválido"
} 

Com duas propriedades, é simples realizar isso com 2 ifs. Mas imagine que temos 10 propriedades, teríamos que fazer 10 ifs e retornar a propriedade que tem a chave igual ao parâmetro chave da função.

function nomeOuSobrenome(pessoa, chave) {
    if(chave!= "nome" && chave!= "sobrenome") return "valor inválido"
    return pessoa[valor]
}

Na função acima, podemos passar como valor em chave o nome da propriedade que queremos acessar. Por exemplo, se passarmos "nome" como parâmetro, a função retornará pessoa["nome"] que é a mesma coisa que pessoa.nome.

var nome = nomeOuSobrenome(pessoa, "nome");
console.log(nome) //imprime o nome da pessoa

Ou seja, quando não sabemos ao certo qual propriedade vamos acessar, acessar as propriedades com [chave] é uma boa solução.

No código que você postou na pergunta, é exatamente isso que acontece. Não sabemos ao certo qual tipo de erro de input vai vir, quem decide isso é quem está chamando a função.

Para a sua segunda pergunta, é possível sim acessar objetos dentro de objetos por meio do . e também dos colchetes. Isso não é exclusivo do javascript, outras linguagens também são capazes de realizar este comando.

No momento não me recordo se em algum curso específico isso é abordado, as segue o post na MDN sobre este assunto.

Essa pergunta foi meio extensa, então caso não tenha entendido alguma coisa, pergunte aqui de novo! Espero ter ajudado! :)

Ajudou sim ... Obrigado :) . Tirou minha dúvida trazendo um caso de uso para a funcionalidade que não conhecia.