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

[Dúvida] Dúvida em relação a utilizar a propriedade de um objeto dentro do próprio objeto

Estou com dúvida em relação a uma declaração que vi no curso, o professor passou a declaração de um objeto da seguinte forma:

    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)
    }

no caso ele passou "form.peso.value" e "form.altura.value" como argumento para a função calculaImc(), mas estou com dificuldades de entender porque não poderia ser da seguinte forma:

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

utilizando o segundo código deu uma diferença de decimais no resultado, gostaria de saber qual a diferença entre eles na hora da execução

2 respostas
solução!

Oii Mariana, tudo bem?

No primeiro exemplo que você mencionou, o código utiliza diretamente os valores obtidos através do objeto form para calcular o IMC:

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)
}

Isso garante que os valores atuais de form.peso.value e form.altura.value sejam usados no momento da criação do objeto paciente.

No segundo exemplo que você tentou:

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

A tentativa de usar peso e altura diretamente dentro do objeto resulta em erro porque, no contexto do objeto, peso e altura não são reconhecidos isoladamente. Eles precisam ser referenciados como propriedades de algum objeto ou variável definida anteriormente. No momento que você tenta usar peso e altura diretamente, o JavaScript não sabe a que esses nomes se referem, pois eles não foram definidos como variáveis independentes no escopo atual.

E, mesmo que peso e altura fossem variáveis definidas no escopo externo ao objeto, o uso de form.peso.value e form.altura.value assegura que você está acessando os valores mais recentes e diretamente do formulário, o que pode ser crucial para a precisão dos dados, especialmente em aplicações dinâmicas onde os valores do formulário podem mudar.

Então o método correto e seguro é o primeiro exemplo, onde você acessa os valores diretamente através de form.peso.value e form.altura.value.

Um abraço e bons estudos.

Entendi, muito obrigada Lorena!