このチュートリアルでは、コールバックで正しい「this」にアクセスする方法を説明します。
すべての関数には、「コンテキスト」とも呼ばれる this というキーワードが含まれており、その値は、関数がどのように、いつ、どこで定義されるかではなく、関数の呼び出し方法によって決まります。他の変数とは異なり、字句スコープの影響を受けません。他の言語と比較すると、関数の "this" キーワードを使用する場合、JavaScript は若干異なる動作をします。厳密モードと非厳密モードの間にはさらにいくつかの変更があります。
関数が最も一般的に呼び出される方法によって、「this」(実行時バインディング) の値が決まります。これは関数が呼び出されるたびに変更される可能性があり、実行時の割り当てによって変更することはできません。アロー関数は独自の "this" バインディングを提供しないため (アロー関数は、囲んでいる字句コンテキストの "this" 値を保持します)、関数が呼び出される回数ごとに、bind() メソッドでこの値を設定できます。
別の関数からパラメータを受け取る関数はコールバックと呼ばれ、通常は後から外部関数で使用されます。高階関数は、コールバックを受け入れる外部関数を説明するために使用される用語です。
関数は JavaScript のオブジェクトであるため、コールバックには独自のメソッドとプロパティのセットがあります。高階関数内で実行されるときにコールバックに割り当てられる「this」属性は、コールバックがどこで、どのように、いつ定義されるかではなく、コールバックの作成方法に完全に依存します。
コールバックを呼び出す高階関数を調べることで、コールバック内の「this」値を決定できます。囲んでいる関数の実際の定義には、ローカル スコープのプロパティが含まれている可能性があります。これが、コールバックにおけるこの問題の主な原因です。ただし、コールバックのコンテキストは呼び出し方法に応じて動的に変化するため、コールバックの「this」バインディングを介してプロパティにアクセスすると、そのプロパティは存在しません。
次に、コールバックで正しい「this」にアクセスする方法を学びます。
self という名前の変数を作成し、宣言された関数のスコープ内でそれに this 値を割り当てるのが一般的なパターンです。 self という名前の新しい変数 (または他の有効な変数名でも可能) を作成し、それに値「this」を与えることで、目的の動作を実現できます。
###例### リーリー別の変数を使用して「この」オブジェクトを保存します
これをオブジェクトに明示的にバインドする
##コールバックを定義するときに、必要なものを宣言できます。 bind() メソッドを使用して「this」値を設定すると、呼び出されたり渡されたりする方法や場所に関係なく、関数の実行中ずっとその値が維持されるようにすることができます。bind() メソッドはすべての関数で使用でき、指定されたオブジェクトに接続された "this" プロパティを使用して新しい関数を作成します。返された関数と元の関数の唯一の違いは、「this」属性が指すものを完全に制御できることです。
以上がコールバックで正しい「this」にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。