在 JavaScript 中使用'setTimeout”时如何使用'this”保留上下文?
Oct 24, 2024 pm 01:34 PM在 JavaScript 中使用 setTimeout 并通过 this 保留上下文
在 JavaScript 中使用 setTimeout 函数时,必须了解它如何处理这的背景。当在超时回调中调用不同上下文中定义的方法时,这一点变得尤其重要。
在提供的代码片段中,方法函数调用 method2,该方法根据传递的 ID 检索图像元素并设置其 src 属性。最初,method2 执行成功。但是,在 setTimeout 延迟之后,会发生错误,因为 method2 函数不再在预期上下文中定义。
出现问题的原因是 setTimeout 创建了一个新的执行上下文,而 this 关键字默认为全局对象。在提供的代码中,使用测试原型的上下文调用方法函数,但是当超时回调执行时,this上下文已更改为全局对象。
解决方案:
要在超时回调中保留 this 的预期上下文,您可以使用 .bind() 方法显式设置上下文的绑定。通过将 .bind(this) 附加到传递给 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.bind(this), 5000); // ^^^^^^^^^^^ <- fix context };
登录后复制
通过添加.bind(this),回调函数中的this关键字将与测试原型绑定,使得method2即使在setTimeout延迟后也能在原型方法的上下文中正确调用。
以上是在 JavaScript 中使用'setTimeout”时如何使用'this”保留上下文?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林
两个点博物馆:所有展览以及在哪里可以找到它们
3 周前
By 尊渡假赌尊渡假赌尊渡假赌

热门文章
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林
两个点博物馆:所有展览以及在哪里可以找到它们
3 周前
By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)