ホームページ >ウェブフロントエンド >jsチュートリアル >setTimeout コールバックで正しい「this」コンテキストを保持するにはどうすればよいですか?

setTimeout コールバックで正しい「this」コンテキストを保持するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-23 15:27:11235ブラウズ

How Can I Preserve the Correct

「this」による setTimeout コールバックのコンテキストの保持

setTimeout を使用して遅延後のコールバックをスケジュールする場合、一般的に、 setTimeout 呼び出しが行われた関数からのコンテキスト。ただし、setTimeout はグローバル オブジェクトを指す "this" を使用してコールバックを実行することに注意することが重要です。コールバックがインスタンス メンバーを参照している場合、予期しない動作が発生する可能性があります。

この問題を解決するには、いくつかの方法があります。アプローチ:

1.コンテキストへの参照を保存する:

最も簡単な解決策は、setTimeout を呼び出す前に正しいコンテキストへの参照を保存することです。この参照は、パラメータとしてコールバック関数に渡すことができます。

var that = this;
if (this.options.destroyOnHide) {
    setTimeout(function() { that.tip.destroy() }, 1000);
}

2.バインド メソッドを使用する (ES5):

バインド メソッドを使用すると、事前に決定された「this」値を持つ新しい関数を作成できます。これにより、コンテキストへの参照を手動で保存する必要がなくなります。

if (this.options.destroyOnHide) {
    setTimeout(function(){ this.tip.destroy() }.bind(this), 1000);
}

3.アロー関数を使用する (ES6):

アロー関数には独自の "this" 値がありません。代わりに、それを囲んでいる字句スコープから「this」値を継承します。これにより、コールバックでコンテキストを保持するのに最適になります。

if (this.options.destroyOnHide) {
    setTimeout(() => { this.tip.destroy() }, 1000);
}

4.コンテキストを引数として渡す (ES5 ):

HTML5 では、setTimeout のコールバック関数に引数を渡すことができます。これにより、使用するコンテキストを明示的に指定できます。

if (this.options.destroyOnHide) {
    setTimeout(function(that){ that.tip.destroy() }, 1000, this);
}

これらのアプローチを理解することで、setTimeout コールバックで正しいコンテキストを効果的に維持し、予期しない動作を回避できます。

以上がsetTimeout コールバックで正しい「this」コンテキストを保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。