「this」ポインタはネストされた JavaScript 関数でどのように動作しますか?

Susan Sarandon
リリース: 2024-10-19 06:49:02
オリジナル
333 人が閲覧しました

How Does the

ネストされた Javascript 関数における「この」ポインタの動作

オブジェクトのメソッド内でネストされた関数を定義する場合、その方法を理解することが重要です「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" refers to the window object
      if (this.activeEffect == "fade") { }

    }

    doSomeEffects();
  }
};

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

このシナリオでは、"this" ポインターは、ネストされた関数 "doSomeEffects()" 内の "window" オブジェクトを参照するはずであるという予想に反して、それを参照しています。 「std_obj」オブジェクト。この動作を解明するには、JavaScript の「this」ポインタの性質を詳しく調べる必要があります。

JavaScript では、「this」ポインタは関数の呼び出し方法によって決まります。 3 つの主なメソッドがあります:

  • メソッド呼び出し: someObject.someFunction(arg1, arg2) - "this" は "someObject" に割り当てられます。
  • 関数呼び出し: someFunction.call(someObject, arg1, arg2) - 「this」は「someObject」に割り当てられます。
  • 関数適用: someFunction.apply(someObject, [arg1, arg2]) - "this" は "someObject" に割り当てられます。

入れ子関数のシナリオでは、関数 "doSomeEffects()" は "this" オブジェクトを指定せずに呼び出されます。したがって、「this」ポインタはデフォルトでグローバル オブジェクト、通常は「window」オブジェクトになります。 「this」が目的のオブジェクトを参照していることを確認するには、「std_obj.displayMe()」メソッドで「doSomeEffects()」の「this」ポインタを明示的に設定する必要があります。

「this」を管理する原則を理解することで、 " ポインターを使用すると、開発者は予期しない動作を防止し、ベスト プラクティスに準拠したコードを作成できます。

以上が「this」ポインタはネストされた JavaScript 関数でどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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