Bind() внутри класса vs bind внутри «классического» объекта

У меня есть два объявления объекта. Один без использования класса, а второй создается классом. Я знаю, что мне нужно использовать 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();
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме