首页  >  文章  >  web前端  >  使用 setInterval 和 setTimeout 处理原型方法中的“this”引用:解决方案是什么?

使用 setInterval 和 setTimeout 处理原型方法中的“this”引用:解决方案是什么?

Linda Hamilton
Linda Hamilton原创
2024-10-18 15:03:30368浏览

Handling

使用 setInterval 和 setTimeout 处理原型方法中的 this 引用

在 JavaScript 中,原型方法在提取并传递到其他地方时会失去 this 关联。考虑以下代码:

function Foo() {}
Foo.prototype = {
  bar: function () {
    this.baz();
  },
  baz: function () {
    this.draw();
    requestAnimFrame(this.baz);
  }
};

此代码失败并出现错误,因为它未正确绑定在 setInterval 或 setTimeout 回调内。

解决方案:

有几种方法可以处理这个问题:

将方法调用包装在匿名函数中:

var that = this;
setInterval(function () {
  return that.baz();
}, 1000);

这可以使用外部函数保留 this辅助变量。

将方法调用包装在胖箭头函数中:

setInterval(() => this.baz(), 1000);

胖箭头匿名函数维护周围函数的 this。

使用绑定函数:

setInterval(this.baz.bind(this), 1000);

// dojo toolkit example:
setInterval(dojo.hitch(this, 'baz'), 10);

诸如 Function.prototype.bind 之类的绑定函数或等效库允许您显式绑定 this 上下文。

以上是使用 setInterval 和 setTimeout 处理原型方法中的“this”引用:解决方案是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn