首页 > web前端 > js教程 > 如何在'setTimeout”回调中维护正确的'this”上下文?

如何在'setTimeout”回调中维护正确的'this”上下文?

Barbara Streisand
发布: 2024-12-10 12:05:14
原创
917 人浏览过

How to Maintain the Correct `this` Context in `setTimeout` Callbacks?

确保 setTimeout 回调中正确的 this 上下文

当使用 setTimeout 安排回调函数时,确保该函数保留所需的上下文。但是,当 this 引用回调中的全局对象时,就会出现问题。

在提供的示例中:

if (this.options.destroyOnHide) {
     setTimeout(function() { this.tip.destroy() }, 1000);
}
登录后复制

this 引用全局窗口,而不是预期对象。为了防止这种情况,有几种方法:

  1. 存储上下文:

在调用 setTimeout 之前保存对当前上下文的引用。

var that = this;
if (this.options.destroyOnHide) {
     setTimeout(function(){ that.tip.destroy() }, 1000);
}
登录后复制
  1. 使用bind方法(ES5):

使用 bind 创建一个绑定到正确上下文的新函数。

if (this.options.destroyOnHide) {
     setTimeout(function() { this.tip.destroy() }.bind(this), 1000);
}
登录后复制
  1. 使用箭头函数 (ES6 ):

箭头函数自动从其词法继承 this 值

if (this.options.destroyOnHide) {
     setTimeout(() => { this.tip.destroy() }, 1000);
}
登录后复制
  1. 将参数传递给回调(HTML5):

HTML5 的计时器允许将参数传递给回调。

if (this.options.destroyOnHide) {
     setTimeout(function(that){ that.tip.destroy() }, 1000, this);
}
登录后复制

请记住,this 的上下文可能会根据函数的调用方式而有所不同。为了确保所需的行为,请根据可用的语言功能考虑适当的方法。

以上是如何在'setTimeout”回调中维护正确的'this”上下文?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板