У меня есть два объявления объекта. Один без использования класса, а второй создается классом. Я знаю, что мне нужно использовать bind() в первом методе печати one для ссылки на массив объектов, поскольку метод setTimeout ссылается на окно, поэтому мне нужно изменить контекст ключевого слова this. Мой вопрос: почему во втором я не использую bind() и результат точно такой же?
let obj = {
time: 2000,
array: ["cat", "dog", "tortoise", "bat"],
print: function(){
setTimeout(function(){
this.array.forEach(el => console.info(el.toUpperCase()));
}.bind(this), this.time);
}
}
obj.print();
class Obj {
constructor(){
this.time = 2000;
this.array = ["cat", "dog", "tortoise", "bat"];
}
print(){
setTimeout(()=>{
this.array.forEach(el => console.info(el.toUpperCase()));
}, this.time);
}
}
let o = new Obj();
o.print();



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Потому что во втором (классовом) объекте вы используете функцию arrow, которая связывает this с его лексической областью (классом Obj), а не традиционную функцию, которая связывает this с местом вызова (откуда функция была вызвана из ).