JSでプロトタイプの継承がどのように機能しているかを知っていれば、一見簡単ですが、答えはより明確になります。
まだ、プロトタイプの仕組みを簡単に説明しようとします。
JSでは、すべてがオブジェクトです。数値、文字列、ブール値などのプリミティブな値はオブジェクトのようには見えませんが、内部的にオブジェクトのように扱われます。
クイックリファレンスは以下を参照してください。すべてがオブジェクトです。 ![enter image description here](https://i.stack.imgur.com/1XZrO.png)
ここで問題のケースに来ることができます。 JSで何かを作成するたびに、既存のプロトタイプを使用します。これは、作成しているアイテムの種類によって異なります。
以下の行は基本的にバックグラウンドで多くのことをしています。これは、名前が 'A'の関数を作成しています。その間、JSエンジンはFunction.prototypeと呼ばれる既存の特殊オブジェクトをブラウザで使用します。これには、作成している関数の基本的な特性が含まれています。次に、コンストラクタとデフォルトのオブジェクトプロトタイプへのリンク(protoで参照される)の2つのプロパティのみを持つ新しいオブジェクトを作成します。そして、この新しく作成した関数に書き込んだ新しい関数定義を割り当てます。
function A(n){this.n=n;};
そこで私たちはここに理解するには、2つのプロトタイプいる:Function.prototypeは、我々がどの上述の既存のオブジェクトであることを
- Function.prototype
- A.prototype
を与えるだろう新しい機能を作り出すためにエンジンによって提供される。
A.prototypeは、Aが宣言されたときに作成される新しいオブジェクトです。新しい関数Aを使ってオブジェクトを作成していないことに注意してください。
JSエンジンは、A.prototypeからプロパティを継承する新しいオブジェクトを作成し、A(this.n = nなど..)に格納されている関数定義を実行し、新しく作成されたオブジェクトを返します。
- A.prototype
から継承オブジェクト
- A私はFunction.prototype
から
を継承機能(特殊目的)であるを要約する
let a = new A(1);
以下のコードが何を意味するのかがはっきりしているはずです。
Object.getPrototypeOf(a) === A.prototype // true
Object.getPrototypeOf(A) === Function.prototype //true
Object.getPrototypeOf(a)=== A.prototype –