在类方法中使用 setTimeout 函数时,可能会遇到错误,表明类中的另一个方法(例如,所提供代码中的“method2”)在超时后未定义。这是由于 JavaScript 在嵌套函数中处理 this 关键字的方式造成的。
在示例代码中,使用 setTimeout 函数以指定的延迟来调用测试对象中的方法函数。 method2 函数在 method 函数中调用,以根据传递的 ID 检索图像元素。最初,这可以正常工作。
但是,超时后,method2 函数由于 setTimeout 函数中的绑定方式而变得未定义。默认情况下,this 指的是在 setTimeout 中作为回调调用时的全局对象。
要解决此问题,一种解决方案是将 .bind(this) 附加到传递给 setTimeout 的函数末尾。这可确保 this 上下文正确绑定到对象(在本例中为测试对象)。在修改后的代码中:
<code class="js">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 };</code>
使用 .bind(this) 允许 method2 函数在 setTimeout 回调中保留正确的 this 上下文,从而使其能够成功检索和操作图像元素。
以上是使用 setTimeout 时如何处理 JavaScript 中'this”的上下文问题?的详细内容。更多信息请关注PHP中文网其他相关文章!