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

Uncaught TypeError: Cannot read property 'calculaImc' of undefined

Olá, estou com a seguinte dúvida no código. Fiz um outro arquivo .js para a função de montar o paciente, porém ao rodar ele da o erro calcula-imc.js:8 Uncaught TypeError: Cannot read property 'calculaImc' of undefined. Não consigo achar o problema. No arquivo index coloquei

<script src="montaPaciente.js"> </script>
<script src="calcula-imc.js"> </script>

Meu arquivo monta Paciente é:

function montaPaciente(pacienteTr){    
    var paciente = {
        nome : pacienteTr.getElementsByClassName("info-nome")[0].textContent,
        peso : pacienteTr.getElementsByClassName("info-peso")[0].textContent,
        altura : pacienteTr.getElementsByClassName("info-altura")[0].textContent,
        calculaImc : function(){
            if(this.altura != 0){
                var imc = this.peso / (this.altura * this.altura);
                console.log("O imc calculado para o paciente de altura " + this.altura+" e de peso " + this.peso +" é:"+ imc); // imprime o imc
                return imc;
            }else{
                console.log("Erro: Altura igual a 0");
                return "ERRO";
            }
        }
    };
}

Meu arquivo calcula-imc.js

console.log("Pegando os dados dos pacientes")
var pacientesTr = document.getElementsByClassName("paciente");
console.log("Dados coletados!");
for(var posicao = 0; posicao <= pacientesTr.length-1; posicao++){
        var pacienteTr = pacientesTr[posicao];
        paciente = montaPaciente(pacienteTr);        
        imcHtml = pacienteTr.getElementsByClassName("info-imc")[0];
        imcHtml.textContent = paciente.calculaImc();
}
2 respostas
solução!

Gabriel,

Seu método montaPaciente não está retornando o paciente criado. E nisso o JavaScript está jogando Undefined na variável paciente do arquivo calcula-imc.js. Retornando o valor já deve resolver o seu problema.

Abraço.

Opa, não tinha percebido que faltava o return. Tava quebrando a cabeça sem entender, vlw!