Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

como usar um objeto como parametro de uma função

function status(bmi){
   if(costumers.bmi < 18.5)
     return "abaixo do peso"
   else if(costumers.bmi >= 18.5 && costumers.bmi <= 24.9)
       return "normal"
   else if(costumers.bmi >= 25 && costumers.bmi <= 29.9)
         return "sobrepeso"
   else if(costumers.bmi >= 30 && costumers.bmi <= 34.9)
          return "obesidade gra 1"
   }

buttom.addEventListener("click",function(event){
  event.preventDefault()

  var costumers = {
    name: form.name.value,
    wight: form.wight.value,
    height: form.height.value,
    fat: form.fat.value,
    bmi: form.wight.value / (form.height.value * form.height.value),
    status: status(costumers.bmi) // <=está função aqui
  }
1 resposta
solução!

Olá Henrique, tudo bem com você?

Então referenciar atributos do próprio objeto pode ser uma tarefa complicada, a minha primeira recomendação seria calcular esses valores antes de colocar no objeto, pois da maneira que você quer é impossível (pois estamos querendo um valor de algo que ainda nem foi criado)

Acredito que você também cometeu um erro de digitação durante seu código, deveria ser "weight" ao invés de "wight" para se referir a peso :)

Calculando antes ficaria algo como:

var bmi = form.weight.value / (form.height.value * form.height.value);
var status = statusImc(bmi)

var costumers = {
    name: form.name.value,
    weight: form.weight.value,
    height: form.height.value,
    fat: form.fat.value,
    bmi: bmi,
    status: status

E ainda poderíamos reduzir, porque em um objeto quando a chave e o valor tem o mesmo nome podemos digitar apenas uma vez:

var costumers = {
    name: form.name.value,
    weight: form.weight.value,
    height: form.height.value,
    fat: form.fat.value,
    bmi,
    status

E dessa forma nossa função statusImc ( a sua função status) teria apenas um valor que seria o bmi:

        function statusImc(bmi) {
            if(bmi < 18.5)
                return "abaixo do peso"
            else if(bmi >= 18.5 && bmi <= 24.9)
                return "normal"
            else if(bmi >= 25 && bmi <= 29.9)
                return "sobrepeso"
            else if(bmi >= 30 && bmi <= 34.9)
                return "obesidade gra 1";
        }

Dessa maneira o nosso código pode ficar um pouco mais fácil de criar :)

Mais para frente no curso de Javacript Avançado aqui da Alura teremos algumas maneiras melhores para resolver esse problema :)

Outra coisa que acredito que você ficou confuso na sua função de status, foi quando utilizar o costumers.bmi e ai precisamos separar em algumas partes:

function status(bmi){

Veja que estamos querendo receber um bmi então ele pode ser um valor (em nosso caso é!), ou poderia ser um objeto:

Então não podemos fazer:if(costumers.bmi < 18.5) pois na verdade nem temos um objeto chamado costumers nessa parte da função.

E ainda temos outro problema pois estamos passando um valor e ai não temos mesmo como utilizar o ponto

Caso fosse um objeto teríamos que acessar da seguinte maneira:

function status( objeto ) {

if(objeto.bmi < 18.5)

Compreendeu? Qualquer coisa estou a disposição :)

Abraços e Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software