ホームページ >ウェブフロントエンド >jsチュートリアル >setTimeout コールバックで正しい「this」コンテキストを保持するにはどうすればよいですか?
「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 サイトの他の関連記事を参照してください。