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.