1
resposta

Dúvida Aula 5 - Criando Objeto.

Na aula 5 : https://cursos.alura.com.br/course/javascript-programando-na-linguagem-web/task/24299 , no vídeo.

function obtemPacienteDoFormulario(form){

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        altura: form.altura.value,
        gordura: form.gordura.value,
        imc: calculaImc(form.peso.value, form.altura.value)
    }

    return paciente;
}

No calculo do IMC, por que eu preciso pegar o "form.peso.value"? Eu não posso pegar o peso do objeto acima diretamente? O que afeta?

1 resposta

Oi Nikolai,

Você quis dizer fazer algo assim né:

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        altura: form.altura.value,
        gordura: form.gordura.value,
        imc: calculaImc(this.peso, this.altura)
    }

Então, isto não funciona por que este objeto ainda está sendo definido quando tentamos executar o calculaImc, e ele não tem o contexto próprio ainda para definir o this. O this, no exemplo que dei acima na verdade ainda é a própria janela do navegador, que não tem as propriedades peso nem altura e logo dará erro no cálculo do IMC.

Um jeito de conseguirmos definir o peso e altura a partir do próprio objeto paciente, como você quer, é definir por partes.

Primeiro criando um objeto paciente:

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        altura: form.altura.value,
        gordura: form.gordura.value,
    }

E depois que ele já existir e estiver definido e que vamos adicionar uma nova propriedade a ele, que é a propriedade imc utilizando os dados do próprio paciente:

paciente .imc = calculaImc(paciente.peso, paciente.altura);

Ai ele não acusará erro e conseguiremos definir o IMC a partir dos dados do próprio objeto paciente.

Me diga se esclareci sua dúvida e será isso mesmo que você havia perguntado.

Abraços,

Douglas Quintanilha