首頁  >  文章  >  web前端  >  使用 setInterval 和 setTimeout 處理原型方法中的「this」引用:解決方案是什麼?

使用 setInterval 和 setTimeout 處理原型方法中的「this」引用:解決方案是什麼?

Linda Hamilton
Linda Hamilton原創
2024-10-18 15:03:30367瀏覽

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