「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 入れ子になった JavaScript 関数で「this」ポインタがグローバル オブジェクトを指すのはなぜですか?

入れ子になった JavaScript 関数で「this」ポインタがグローバル オブジェクトを指すのはなぜですか?

2024 年 11 月 1 日に公開
ブラウズ:542

Why Does the \

入れ子関数における JavaScript "this" ポインターの謎

JavaScript コード スニペットで、"this" に関して予期しない動作が発生しました。 " 入れ子関数内のポインタ。オブジェクト メソッド内でネストされた関数を定義しているにもかかわらず、ネストされた関数内の "this" ポインターはグローバル "window" オブジェクトを指します。

"this" ポインターの動作は、次の関数呼び出しメソッドによって決まります。 JavaScript。 3 つの主なメソッドがあります:

  1. 直接呼び出し: someThing.someFunction(arg1, arg2, argN)

    • このメソッドでは、「this」ポインターは参照します。この場合、関数を呼び出すオブジェクトに、 someThing.
  2. call() による関数呼び出し: someFunction.call(someThing, arg1, arg2, argN)

    • call() 関数「this」ポインタを提供されたオブジェクトに明示的に設定します。この場合、 someThing.
  3. apply() による関数呼び出し: someFunction.apply(someThing, [arg1, arg2, argN])

    • 呼び出しと同様() の場合、apply() 関数は「this」ポインタを指定されたオブジェクトに設定しますが、引数の配列を受け取ります。

指定した例では、明示的な関数呼び出しメソッドを使用せずに、ネストされた関数が呼び出されます。その結果、「this」ポインタはデフォルトでグローバル オブジェクトになります。これは通常、ブラウザ環境の「ウィンドウ」オブジェクトです。

「this」ポインタの動作を明示的に指定するには、次の変更を使用できます。 :

  1. std_obj.displayMe の代わりに std_obj.displayMe() を使用します。
  2. オブジェクトの this ポインターを使用してネストされた関数を明示的に定義します。 var doSomeEffects = function() { var that = this; ... }
  3. call() 関数または apply() 関数を使用して、「this」ポインターを設定します: doSomeEffects.call(std_obj);

これらのメソッドのいずれかを利用します。を使用すると、ネストされた関数内の「this」ポインターの動作を制御し、それが目的のオブジェクトを確実に参照できるようにすることができます。

リリースステートメント この記事は次の場所に転載されています: 1729291638 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3