ホームページ > ウェブフロントエンド > jsチュートリアル > 呼び出しパターンに基づいて、JavaScript 関数で「this」キーワードの動作はどのように異なりますか?

呼び出しパターンに基づいて、JavaScript 関数で「this」キーワードの動作はどのように異なりますか?

Linda Hamilton
リリース: 2024-12-13 17:30:20
オリジナル
347 人が閲覧しました

How Does the `this` Keyword Behave Differently in JavaScript Functions Based on Invocation Patterns?

関数内での "this" キーワードのコンテキスト動作

これまで観察したように、JavaScript 内で "this" キーワードは予期しない動作を示す可能性があります。機能。この動作は、関数が本質的に特定のオブジェクトにバインドされるのではなく、呼び出しパターンによって決定される「this」バインディングを持つ JavaScript の動的な性質に由来しています。

クラス メソッドでは、「this」は、メソッドが呼び出されたクラス。ただし、(先行するドット演算子なしで) 関数として直接呼び出された場合、「this」はデフォルトでグローバル オブジェクト (通常はブラウザのウィンドウ オブジェクト) になります。

「this」に影響する呼び出しパターン:

  • メソッドとして: 「this」キーワードは次のようにバインドされています。メソッドを所有するオブジェクト。
  • 関数として: "this" はグローバル オブジェクトにバインドされており、その結果、遭遇した一貫性のない動作が発生します。
  • コンストラクターとして ("new" を使用): 新しいオブジェクトが作成され、"this" がそれにバインドされます。 object.
  • With "apply()": "this" の値を明示的に制御できるようにし、引数の配列を渡すこともできます。

設計の背後にある理由:

「この」バインディング動作が恣意的であると考える人もいるかもしれませんが、これは、厳密な型指定よりも柔軟性を重視する JavaScript の設計哲学と一致しています。関数はさまざまなコンテキストで再利用でき、関数の「this」バインディングは「var that = this」などの手法を使用してそれに応じて調整できます。

この動作の根本的な理由は、JavaScript に真のクラスが欠如していることです。代わりに、オブジェクトと関数を使用してオブジェクト指向の構造を作成します。これにより、開発者はカスタム継承階層を定義し、実行時にオブジェクトを動的に作成および変更できます。

概要:

JavaScript 関数の "this" キーワードは、以下に基づいて動的にバインドされます。呼び出しパターン。クラス メソッドでは、クラス インスタンスを参照しますが、直接関数呼び出しでは、グローバル オブジェクトを参照します。 「var that = this」を設定するような手法は、呼び出しパターンが明らかでないコールバックやその他の複雑な状況での「this」バインディングの管理に役立ちます。

以上が呼び出しパターンに基づいて、JavaScript 関数で「this」キーワードの動作はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート