Considere o código 1 sendo o objeto abaixo:
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}.`);
}
}
}
Agora, considere o código 2 sendo a classe abaixo:
class ModuloDeImpressao {
codigo = 20;
imprime(nomes) {
nomes.forEach(function (nome){
console.log(`${this.codigo}: ${nome}`);
});
}
}
Por qual motivo, no Código 1, o this
, mesmo dentro de uma function
, consegue acessar o valor da propriedade 'saldo' no valor de 150 e, no Código 2, o mesmo this
não consegue acessar a propriedade 'codigo' no valor de 20 ???
Teoricamente a function
cria um novo escopo e no Código 2 o problema seria resolvido com uma Arrow Function. Por que no Código 1 um novo escopo não foi criado com a function
?
Ficam duas questões aí para quem puder ajudar no entendimento...