«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как сохранить ссылку «this» при использовании setTimeout в JavaScript?

Как сохранить ссылку «this» при использовании setTimeout в JavaScript?

Опубликовано 22 декабря 2024 г.
Просматривать:394

How to Preserve the \

setTimeout и неуловимое «это» в JavaScript

При использовании функции setTimeout разработчики часто сталкиваются с проблемой, когда последующие вызовы методов теряют значение их предполагаемый контекст, что приводит к появлению, казалось бы, неопределенных методов. Обычно это вызвано потерей ссылки this.

Проблема:

Рассмотрите следующий код:

test.prototype.method = function() {
    //method2 returns image based on the id passed
    this.method2('useSomeElement').src = "http://www.some.url";
    timeDelay = window.setTimeout(this.method, 5000);
};

test.prototype.method2 = function(name) {
    for (var i = 0; i  1) {
            return document.images[i];
        }
    }
};

При начальной загрузке страницы функция метода2 работает должным образом. Однако после установки таймаута последующие вызовы метода2 приводят к ошибке, указывающей на то, что он не определен.

Решение:

Основная проблема заключается в способе обработки setTimeout это ключевое слово. При установке тайм-аута с помощью setTimeout(this.method, 5000) контекст теряется, что приводит к ошибке.

Умное решение этой проблемы — использовать метод связывания(). Добавляя «.bind(this)» в конец вызова метода, можно явно привязать контекст, гарантируя, что правильная ссылка «this» сохранится даже после таймаута.

Улучшенный код :

test.prototype.method = function() {
    //method2 returns image based on the id passed
    this.method2('useSomeElement').src = "http://www.some.url";
    timeDelay = window.setTimeout(this.method.bind(this), 5000);
    //                                       ^^^^^^^^^^^ <- fix context
};

Благодаря этой модификации контекст «this» правильно привязан, что позволяет методу 2 продолжать работать так, как задумано, после истечения тайм-аута. Этот подход одновременно элегантен и эффективен для сохранения правильного контекста выполнения.

Заявление о выпуске Эта статья перепечатана по адресу: 1729735477. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3