JavaScriptプロトタイプとプロトタイプチェーン

プロトタイプとプロトタイプチェーンは、JavaScriptの魔法のようなものです。また、プロトタイプとプロトタイプチェーンは、ほとんどの人にとって理解するのが最も難しい部分です。プロトタイプとプロトタイプチェーンの本質を習得することは、javaScriptの重要な部分です。JavaScriptプロトタイプとプロトタイプチェーンの私の理解を共有しましょう。

1.オブジェクト分類

JavaScriptのすべての値または変数はオブジェクトであると信じていますが、javaScriptのオブジェクトを次のレベルに分類する必要もあります。
  まず第一に、オブジェクトはトップシチズンです。すべてのオブジェクトは間接的または直接的に派生しているため、これは間違いないはずです。機能は、以下に説明するファーストクラスの市民です。String、Array、Date、Number、Boolean、Mathなどのいくつかの組み込みオブジェクトは、二級市民です。残りはすべて低レベルの市民です。

第二に、プロトタイプのプロトタイプ

まず、プロトタイプは属性であり、オブジェクトでもあります。では、プロトタイプの特性は何ですか?実際、JavaScriptのすべての関数にはプロトタイププロパティがあり、プロトタイプを持つすべてのオブジェクトはそれ自体が関数であり、そうです、それらは関数です。
  最初のものは確認しませんが、主に2番目のものを確認します。Object、Array、Dateのすべてにプロトタイプがあることは誰もが知っています。はい、それらは一種の機能でもあります、なぜあなたはそれを言うのですか?オブジェクトまたは配列を定義する場合、そのように定義できますか?var o = new Object()、a = new Array()javaを学んだ人なら誰でもnewがオブジェクトをインスタンス化する方法を使用していることを知っていますが、JavaScriptには実際のクラスの概念がないことを知っているため、関数を使用してシミュレーションすることしかできないため、上記のアプローチを確認できますオブジェクトと配列も特別な関数です。
  実際、上記の市民は基本的に一種の関数であり、Mathのツールオブジェクトを除いて、この新しいMath()書き込みメソッドを見たことはないはずです。もちろん、この書き込みメソッドもエラーを報告するため、Math.prototypeにアクセスすると、undefinedが返されます。

3、__ proto__およびプロトタイプチェーン

__proto__はポインタであり、オブジェクトを構成するオブジェクトのプロトタイプを指し、一口のように聞こえます。例を挙げてください!
  ここに画像の説明を挿入
  上記のコードのように、oはObjectのインスタンスなので、oの__proto__ポインターはoを構築したObjectのプロトタイプを指します。これの重要性は、oがtoString()などのObject.prototypeのメソッドを使用できることです。oは、toStringメソッドにアクセスするときに最初に自分自身を探します。見つからない場合は、Object.prototypeである__proto__で検索されます。
  ほとんどのJavaScriptオブジェクトには、Objectを含む__proto__のようなポインタがあると言えますが、
ここに画像の説明を挿入
実際に見てみると、a = 1はa = new Number(1)と同等です。すべての組み込みオブジェクトとObjectの__proto__が無名関数を指していることがわかりますので、それらは実際には関数のインスタンスであると考えることができるので、その関数がファーストクラスのシチズンであることを先に述べました。

では、プロトタイプチェーンとは正確には何でしょうか。Number.prototypeオブジェクトである.__ proto__を展開します。これにはtoString()メソッドがありませんが、プロトタイプチェーンの役割であるtoStringメソッドを実際に呼び出すことができます。次のコードを
  ここに画像の説明を挿入
  見てください上記のコードと結果を見てください。aの__proto__に沿ってオブジェクトのプロトタイプにアクセスし続けます。つまり、aのtoStringメソッドは、実際にはObject.prototypeにアクセスするtoStringメソッドです。次に、のプロトタイプチェーンはNumber.prototypeとObject.prototypeで構成されます。メソッドまたはプロパティにアクセスすると、最初にそれ自体が検索され、プロトタイプチェーンに沿って検索されます。見つかった場合は呼び出されます。見つからない場合は、エラーが報告されます。これを確認するために、Number.prototypeにtoStringメソッドを追加します。
  ここに画像の説明を挿入
  aがNumber.prototypeのtoStringメソッドを呼び出し、それを見つけた後に停止していることがわかります。JavaScriptでは、ほとんどすべてのオブジェクトのプロトタイプチェーンのエンドポイントはObject.prototypeです。

まとめ

__proto__はプロトタイプチェーンを実現するための鍵であり、プロトタイプはプロトタイプチェーンの構成です。最後に、プロトタイプチェーンとコンストラクターの間に少し複雑な関係図を添付します。
  ここに画像の説明を挿入
  転載:https://www.cnblogs.com/alichengyin/p/4852616.html

元の記事を40件公開 31 獲得 ビュー2789

おすすめ

転載: blog.csdn.net/CodingmanNAN/article/details/103000768