ネストされた JavaScript 関数で「this」ポインタを保持する方法

DDD
リリース: 2024-10-19 06:52:01
オリジナル
249 人が閲覧しました

How to Preserve the

ネストされた関数の JavaScript "this" ポインター

JavaScript では、ネストされた関数を使用する場合、"this" ポインターの値が混乱を招く可能性があります。機能。予想に反して、ネストされた関数を呼び出すと、外側の関数ではなく、グローバルな「window」オブジェクトに「this」ポインタを割り当てることができます。

次のコードを考えてみましょう。

<code class="javascript">var std_obj = {
  options: { rows: 0, cols: 0 },
  activeEffect: "none",
  displayMe: function() {
    // this refers to std_obj
    if (this.activeEffect == "fade") { }

    var doSomeEffects = function() {
      // this unexpectedly refers to the window object
      if (this.activeEffect == "fade") { }
    };

    doSomeEffects();
  }
};

std_obj.displayMe();</code>
ログイン後にコピー

In thisこのシナリオでは、入れ子関数 doSomeEffects が呼び出されるとき、「this」ポインターは、std_obj のスコープ内で宣言されているにもかかわらず、「window」オブジェクトを指します。これは、JavaScript が関数の呼び出し方法に基づいて「this」ポインターを決定するためです。

この場合、先頭の親オブジェクトなしで doSomeEffects が呼び出され、その結果、グローバル オブジェクト (通常は「ウィンドウ」オブジェクト) が生成されます。 )「this」に割り当てられています。この問題を解決するには、次の 3 つのメソッドを使用できます。

  1. call メソッドを使用して関数を呼び出す:

    <code class="javascript">doSomeEffects.call(std_obj);</code>
    ログイン後にコピー
  2. apply メソッドで関数を適用します:

    <code class="javascript">doSomeEffects.apply(std_obj, []);</code>
    ログイン後にコピー
  3. バインドされた関数を作成します:

    <code class="javascript">var boundDoSomeEffects = doSomeEffects.bind(std_obj);
    boundDoSomeEffects();</code>
    ログイン後にコピー

以上がネストされた JavaScript 関数で「this」ポインタを保持する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!