ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript で「this」のバインディングが必要になるのはどのような場合ですか?

JavaScript で「this」のバインディングが必要になるのはどのような場合ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-24 12:47:02754ブラウズ

When is Binding

JavaScriptのbind()はなぜ必要ですか?

JavaScriptでは、「this」の値は関数の呼び出し方法によって決まります。関数を直接呼び出す場合は、「this」の値を制御します。

ただし、関数がコールバックまたはイベント ハンドラーとして渡されると、外部コードがそれらを呼び出すため、予期しない「this」値が発生します。 「this」が特定のオブジェクトを参照していることを確認するには、.bind メソッドを使用できます。

.bind を使用すると、関数を呼び出す前に「this」の値を設定し、効果的にそのオブジェクトにバインドできます。

「this」の問題はなぜ存在するのですか?

この問題は、JavaScript の実行環境が「this」の値を決定する方法に起因して発生します。関数が定義されている場合、「this」は未定義です。関数がオブジェクトのメソッドとして呼び出される場合、「this」はそのオブジェクトを参照します。

ただし、関数が独立して呼び出される場合、またはコールバックとして呼び出される場合、「this」は通常、グローバル オブジェクトを参照します。 (または厳密モードでは未定義)。一貫性と正しい動作を確保するには、.bind.

例 3 と例 1/2 の比較

例 3 では、storeMyName3 が直接呼び出します。 getName 関数。myName.name の値を返します。この結果は、関数ではなく値であるstoreMyName3に割り当てられます。

対照的に、例1と2では、storeMyNameとstoreMyName2はgetName関数自体への参照です。これらを呼び出すときは、関数を実行して結果を取得します。

例 2 では、関数を呼び出す前に .bind(myName) を使用して "this" の値を myName に設定します。これにより、 this.name が myName.name を参照することが保証されます。

したがって、例 3 では後で関数を呼び出さないため、「this」の問題は発生しませんが、例 1 と 2 では .bind が必要です。今後呼び出されるときに「this」値を明示的に設定します。

以上がJavaScript で「this」のバインディングが必要になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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