首页 > web前端 > js教程 > 正文

异步使用 setTimeout 时如何保留 JavaScript 中'this”的上下文?

Patricia Arquette
发布: 2024-10-24 18:25:19
原创
912 人浏览过

How to Preserve the Context of

setTimeout 和 JavaScript 中难以捉摸的“this”

在 JavaScript 中使用 setTimeout 函数时,遇到的一个常见问题是“this”关键字。当包含 setTimeout 调用的方法引用另一个方法,但在超时期限之后,引用的方法变得未定义时,就会出现这种情况。

此问题源于 setTimeout 的操作方式。当函数作为参数传递给 setTimeout 时,该函数内“this”的上下文就会丢失。这是因为 setTimeout 会异步执行该函数,到那时,“this”的原始上下文可能无法再访问。

要解决此问题,有两种常见的解决方案:

1.使用bind()方法

bind()方法可用于在传递给setTimeout的函数中保留“this”的上下文。通过将“.bind(this)”附加到函数末尾,可以显式保留上下文,如以下示例所示:

setTimeout(function() {
    this.foo();
}.bind(this), 1000);
登录后复制

2.箭头函数

箭头函数自动将“this”绑定到周围的上下文。因此,不需要额外的步骤来维护传递给 setTimeout 的回调函数中的正确上下文:

setTimeout(() => {
    this.foo();
}, 1000);
登录后复制

将这些技术应用于提供的代码片段,可以通过修改代码来解决问题,如下所示:

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
};
登录后复制

以上是异步使用 setTimeout 时如何保留 JavaScript 中'this”的上下文?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!