ホームページ >ウェブフロントエンド >jsチュートリアル >関数の「これ」を制御するために JavaScript の binding() が不可欠なのはなぜですか?

関数の「これ」を制御するために JavaScript の binding() が不可欠なのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 13:32:02871ブラウズ

Why is JavaScript bind() Essential for Controlling

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

JavaScript では、「this」は、実行されるコードを所有するオブジェクトを指します。ただし、関数がコールバックまたはイベント ハンドラーとして渡される場合、呼び出し環境が意図したものと異なる可能性があります。これにより、「this」が意図したオブジェクトではなくグローバル オブジェクトを参照するという問題が発生します。

Bind による問題への対処

JavaScript の binding() メソッドを使用すると、次のことが可能になります。関数内で「this」の値を明示的に設定します。関数を特定のオブジェクトにバインドすると、関数が呼び出されたときに「this」がそのオブジェクトを参照するようになります。

例:

<code class="js">var myName = {
  name: "Tom",
  getName: function() {
    return this.name;
  }
};

var storeMyName2 = myName.getName.bind(myName);
console.log(storeMyName2()); // Output: "Tom" (correct)</code>

getName() を myName にバインドすると、「this」への参照が保持され、関数は正しく「Tom.」を返します。

代替解決策: 例 3

In例 3 では、storeMyName3 には、myName.getName() を即座に呼び出した結果が割り当てられます。これは、storeMyName3 の値が関数ではなく文字列であることを意味します。したがって、「this」の値は関数の呼び出し時ではなく実行時に決定されるため、問題はありません。

Bind() と例 3 の比較

Bind() と例 3 は同じ目標を達成しますが、異なるメカニズムを通じて実現します。 Bind() を使用すると、関数をすぐに呼び出さずに関数のコンテキストを設定できます。一方、例 3 では、関数を呼び出して結果を保存することによってコンテキストを設定します。

以上が関数の「これ」を制御するために JavaScript の binding() が不可欠なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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