2
respostas

Arrow function

tentetei implementar a propriedade reponsável por efetuar a verificação do limite do cliente usando uma arrow function. mas sempre que rodo ele reorno com o valor NaN. qual seria o erro ? segue o código

const cliente = {
    nome:"Marcos",
    idade:32,
    email:"marcos@dominio.com",
    telefone:["8500000000","9900000000"],
    saldo:150,
    efetuaPagamento:  function (valor) {
        if (valor > this.saldo){
            console.log(`Saldo insuficiente. Saldo atual ${this.saldo}.`);
        } else {
            this.saldo -= valor;
            console.log(`Pagamento realizado com sucesso. Saldo atual: ${this.saldo}.`);
        }
    }
}

cliente.efetuaPagamento(200)
2 respostas

Olá, testei aqui e funcionou certinho !

Wagner e Arthur, funcionou pois ele colocou anonnymous function no post.

Quando utilizado arrow function ele retorna NaN pois ele respeira lexical scoping, ou seja o this vira o window ou no NodeJS as variaveis globais ( como o var).

Portanto para utilizar this no arrow function você deve utilizar a referencia do objeto, nesse caso cliente;

const cliente = {
    nome:"Marcos",
    idade:32,
    email:"marcos@dominio.com",
    telefone:["8500000000","9900000000"],
    saldo:150,
    efetuaPagamento:  (valor) => {
        if (valor > cliente.saldo){
            console.log(`Saldo insuficiente. Saldo atual ${cliente.saldo}.`);
        } else {
            cliente.saldo -= valor;
            console.log(`Pagamento realizado com sucesso. Saldo atual: ${cliente.saldo}.`);
        }
    }
}

cliente.efetuaPagamento(200)

outra forma de implementar é utilizando uma class:

class Cliente {

    constructor ({ nome, idade, email, telefone, saldo }) {
        this.nome = nome; 
        this.idade = idade;
        this.email = email;
        this.telefone = telefone;
        this.saldo = saldo;
    }

    efetuaPagamento(valor) {
        if (valor > this.saldo){
            console.log(`Saldo insuficiente. Saldo atual ${this.saldo}.`);
        } else {
            this.saldo -= valor;
            console.log(`Pagamento realizado com sucesso. Saldo atual: ${this.saldo}.`);
        }
    }
}

const marcos = new Cliente({
    nome:"Marcos",
    idade:32,
    email:"marcos@dominio.com",
    telefone:["8500000000","9900000000"],
    saldo:150,
})

marcos.efetuaPagamento(200)

vocês também podem traduzir este post no medium para entender melhor.

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