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

Dúvida no Ex. 4 da Aula 5 - Funções e os cidadãos de primeira classe

Boa noite , pessoal Eu estava brincando aqui com o exercicio, testanndo formatos diferentes e cheguei neste codigo:

function montaPaciente(pacienteX){

    var nomeTd =pacienteX.getElementsByClassName("info-nome")[0];
    var pesoTd = pacienteX.getElementsByClassName("info-peso")[0];
    var alturaTd = pacienteX.getElementsByClassName("info-altura")[0];
    var imcTd = pacienteX.getElementsByClassName("info-imc")[0];

    var paciente= {
        nome: nomeTd.textContent,
        peso: pesoTd.textContent,
        altura: alturaTd.textContent,
        pegaImc: function(){
                    if (this.altura != 0) {
                        var imc = this.peso / (this.altura * this.altura);
                    }
                    return imc; 
                }
    }

    var imcDoPacienteAtual = paciente.pegaImc;
    imcTd.textContent = imcDoPacienteAtual;
    console.log (paciente.nome);


}




var trPacientes= document.getElementsByClassName("paciente");

function percorreImc(trPacientes, comportamento){
    for (var posicaoAtual=0; posicaoAtual <= trPacientes.length -1; posicaoAtual++){
        var pacienteAtual= trPacientes[posicaoAtual];

        comportamento(pacienteAtual);
    }

}

percorreImc(trPacientes, montaPaciente);

O codigo roda normalmente. No console, onde eu peço os nomes dos pacientes, tudo certo. O código retorna Leonardo e Paulo.

O problema é quando eu solicito o imc. Se ao invés de console.log (paciente.nome); eu solicitar console.log (paciente.pegaImc); o código retorna a função e não o resultado da função, como se não reconhecesse o function como uma função, mas sim como texto. O resultado fica...

function(){
                    if (this.altura != 0) {
                        var imc = this.peso / (this.altura * this.altura);
                    }
                    return imc; 
                }
function(){
                    if (this.altura != 0) {
                        var imc = this.peso / (this.altura * this.altura);
                    }
                    return imc; 
                }

Alguem sabe dizer porque isso está acontecendo?

2 respostas
solução!

Olá Hallan! O problema é que você está chamando a função incorretamente. Para chamar uma função tem que colocar os parênteses. Logo, ao invés de você fazer:

paciente.pegaImc

Você deve fazer:

paciente.pegaImc()

Espero ter ajudado! Bons Estudos!

Verdade!!! Problema resolvido.

Obrigado mais uma vez.