ホームページ >ウェブフロントエンド >jsチュートリアル >呼び出しパターンは JavaScript の「this」キーワードにどのような影響を与えますか?
呼び出しパターンが JavaScript の "this" キーワードに与える影響
JavaScript を使用する場合、"this" キーワードに関連する異常な動作が発生する場合があります。関数定義内の「キーワード」。この記事では、呼び出しパターンが「this」の値にどのような影響を与えるかの複雑さを掘り下げ、その動作を包括的に理解します。
さらに掘り下げる前に、JavaScript には従来のようなクラスがないことを明確にすることが重要です。オブジェクト指向言語。代わりに、クラスが構文上の糖衣であるオブジェクトと関数に依存します。この理解は、「this」の動作を解釈するための基礎となります。
呼び出しパターンと「this」
「this」の値は、関数の呼び出し方法によって異なります。これは呼び出しパターンと呼ばれます。主なパターンは 4 つあります:
1。メソッドとして:
関数がオブジェクトのメソッドとして呼び出される場合、「this」はオブジェクト自体にバインドされます。
例:
// foo is the object foo.bar = function() { alert(this); }; // "this" is bound to the foo object foo.bar();
2.関数として:
スタンドアロン関数として呼び出された場合、「this」はグローバル オブジェクト、通常はブラウザーの「ウィンドウ」オブジェクトにバインドされます。
例:
// Global function var baz = function() { alert(this); }; // "this" is bound to the window object baz();
3.コンストラクターとして:
「new」キーワードを使用して呼び出すと、「this」は新しく作成されたオブジェクトにバインドされます。これはクラスのような動作を模倣します。
例:
// Constructor function function MyClass() { this.property = 'value'; } // "this" is bound to the new instance var instance = new MyClass();
4. apply メソッドの使用:
関数の "apply" メソッドを使用すると、引数とともに "this" の値を明示的に定義できます。
例:
var args = [1, 2]; var obj = { prop: 'value' }; // "this" is bound to the obj object, and args is passed as the arguments fun.apply(obj, args);
予期しない動作考慮事項:
コールバックとして使用される内部関数がその定義と異なるパターンで呼び出される場合、「この」動作に不一致が発生する可能性があります。この問題は、オブジェクト リテラル表記を使用してメソッドを定義するときによく発生します。内部関数が関数としてコールバックを呼び出し、その結果、意図したオブジェクトではなくグローバル オブジェクトに「this」がバインドされてしまいます。
この問題に対処するには、 「var that = this」パターンが広く使用されています。 "this" への参照をクロージャ内に保存することで、後続の内部関数呼び出しでも "this" の意図した値にアクセスできます。
以上が呼び出しパターンは JavaScript の「this」キーワードにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。