1
resposta

Inicialização de atributos objetos JS

Olá pessoal, Percebi que em um dos exemplos foi feita a seguinte implementação:

function obterPacienteDoForm(form) {
    return {
        nome: form.nome.value,
        altura: form.altura.value,
        peso: form.peso.value,
        gordura: form.gordura.value,
        imc: calculaIMCFormatadoTela(form.peso.value, form.altura.value)
    };
}

Como é possível ver, é passado à função de cálculo de IMC, valores oriundos diretamente do form, e não dos próprios atributos do objeto que já receberam esses mesmos valores do form.

Tentei mudar a implementação, apenas como um teste e ficou assim:

function obterPacienteDoForm(form) {
    return {
        nome: form.nome.value,
        altura: form.altura.value,
        peso: form.peso.value,
        gordura: form.gordura.value,
        imc: calculaIMCFormatadoTela(peso, altura)
    };
}

Porém desta forma, o cálculo do IMC resultou em NaN. Tentei converter para Number, utilizando a função Number() antes de passar à função, porém, sem sucesso. Após fazer um console.log() nos dois valores após serem enviados para a função:

function calculaIMCFormatadoTela(peso, altura) {
    console.log(peso);
    console.log(altura);
    return calculateIMC(peso, altura).toFixed(2);
}

Foram logadas as duas tags de input respectivamente.

Daí me pergunto, de qual contexto ele puxou isso?

Posso assumir que objetos javascript não conseguem ser acessados durante sua criação?

Obrigado.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi Ítalo, tudo bem? Vamos focar nessa linha que é onde se encontra seu problema:

imc: calculaIMCFormatadoTela(peso, altura)

Primeiro, você esta criando um novo objeto e não existe nenhuma referência local para peso e altura. Quando for calcular o IMC, ele vai tentar somar algo que não foi definido com algo que não foi definido, neste caso, undefined com undefined, que vai resultar em NaN. Not a Number.

Você não pode usar o this neste caso. A referência dele será a própria função. Por isso a captura precisa ser feita direto pelo objeto form.

Entende?