JSプロトタイプとプロトタイプチェーン
ウィンドウには、オブジェクト配列関数というグローバルな3つのプロパティがあり、すべてに多数のプロトタイプがあり、プロトタイプには多くのメソッドがあります。これらのメソッドは、オブジェクト配列関数が宣言されたときに呼び出すためのものです。
次に、オブジェクトvar a = {}を宣言します。オブジェクトでtoString()メソッドを使用したいのですが、どのように使用しますか?すべてのオブジェクトには、Object.prtotypeを指す__proto__プロパティがあります。そのオブジェクトでtoString()メソッドを探します。
プロトタイプチェーンと同様に、オブジェクトには属性__proto__もあります。プロパティまたはメソッドを検索すると、プロトタイプチェーンに沿ってnullになるまで見つかります。
コンストラクターと継承
ここではまずコンストラクタを作成し、次にnewで新しいオブジェクトを作成します。学生のクラスは、商品で作成されました。
関数は再利用しなかったため、Personクラスを再利用する必要があります。
1つは、この関数を直接呼び出す場合、これはウィンドウグローバルオブジェクトを参照し、もう1つは、オブジェクトのメソッドを介して呼び出す場合は、メソッドの前にあるオブジェクトを参照します。
これは常に彼を所有するオブジェクトを指すからです。
この時点で、call applyを使用して、このポイントを現在のStudentオブジェクトに変更する必要があります
たとえば、上記のPersonが直接呼び出される場合、これはグローバルウィンドウを参照しますPerson.apply(p2)を使用する場合、これはp2を参照します
これを変更するには、applyを使用して、thisおよびthis [name、age]とこのパラメーターを渡します。親クラスを呼び出す関数を実装し、親クラスのこれを子クラスにポイントします。
applyとcallは非常に似ていますが、パラメータが配列とオブジェクトの形式であるため
、コンストラクタの継承が実現されます。
問題は、メソッドが通常プロトタイプに配置され、属性が基本クラスPersonを定義または呼び出すための組み合わせの形でオブジェクトに配置されることです。
継承する場合、オブジェクトの一部のみが継承され、プロトタイプの一部は継承されません。プロトタイプチェーンの継承と言えば。
まず基本クラスを作成し、オブジェクトの行をオブジェクトに配置し、メソッドをプロトタイプに配置します。
次に、オブジェクトの基本クラスのプロパティを継承するサブクラスを作成します。次に、サブクラスのプロトタイプが基本クラスのプロトタイプを指すようにします。次に、このように、サブクラスのプロトタイプに別のメソッドを追加します。
中央のこの文のプロセスは、Sudentの__proto__が空のオブジェクトを指し、空のオブジェクトもPersonのプロトタイプを指すプロトを持っているため、プロトタイプチェーンで検索されます。