Ao construirmos uma aplicação em JavaScript, comumente nos deparamos com o seguinte:
var carro = {
som: 'Vrrrrummm',
ligarMotor: function() {
setTimeout(function() {
console.log(this.som);
}, 2000)
}
};
carro.ligarMotor(); // undefined
var self = this;
var carro = {
som: 'Vrrrrummm',
ligarMotor: function() {
setTimeout(function() {
console.log(this.som);
}.bind(this), 2000)
}
};
carro.ligarMotor(); // Vrrrrummm
Ecmascript 2015
Visto que o primeiro argumento do método setTimeout é uma função anônima e precisamos vincular o valor this a ela, podemos tomar proveito da expressão arrow function que dispõe dessas duas características, não sendo mais necessário o uso do método bind em nossa situação:
let carro = {
som: 'Vrrrrummm',
ligarMotor: function(){
setTimeout(() => console.log(this.som), 2000)
}
};