1. プロトタイプ チェーンの継承
プロトタイプ チェーンの継承に関しては、JavaScript は Java や C# などの言語に似ており、単一の親クラスの継承のみを許可します。プロトタイプ継承の基本的な方法は次のとおりです。
function Parent(){ }
function Child(){}
Child.prototype = new Parent();
Child オブジェクトのプロトタイプ属性は、親オブジェクト Parent。これにより、Child オブジェクトのインスタンスが渡すことができます。 プロトタイプ チェーンは、親オブジェクトの構造によって定義されたプロパティ、メソッドなどにアクセスします。
プロトタイプチェーンを介して親オブジェクトをリンクする構造になっているということは、オブジェクトの継承が完了しているということでしょうか。答えはノーです。例:
function Parent(){}
function Child(){}
Child.prototype = new Parent();
var child = new Child();
alert(child.constructor);//function Parent(){}
alert (child instanceof Child);//true
child は依然として Child のインスタンスとして使用できますが、この時点では、インスタンスの子の元のオブジェクト構成情報は失われています。この欠陥を補う方法は次のとおりです。
function Parent(){ }
function Child(){}
Child.prototype = new Parent();
Child.prototype.constructor = Child;
var child( );
alert(child .constructor);//function Parent(){}
alert(child instanceof Child);//true
上のコード スニペットに示すように、 Child.prototype.constructor = Child" を使用して、オブジェクト コンストラクター Child のプロトタイプを明示的に指定し、すべての Child オブジェクト インスタンスを Child として強制的に構築します。
2. apply メソッドと call メソッドを使用します JavaScript 組み込み Function オブジェクトの apply メソッドと call メソッドは、オブジェクト構築内の「this」のコンテキストを変更するため、特定のオブジェクト インスタンスには、定義されたプロパティとメソッドがあります。
実際の開発で HTML ページ上で DOM オブジェクトを操作する場合、継承の適用と呼び出しの使用が特に一般的です。例:
3. オブジェクト インスタンス間の継承
JavaScript オブジェクトのポリモーフィズムにより、インスタンスは属性とメソッドを動的に追加できます。この機能は、オブジェクト インスタンス間の JavaScript 継承で別の継承メソッドを作成します。例:
var Person = {name: "ナテナ"、年齢: "26"};
var nathena = {性別:"男性"};
(function inlineExtends(so,po)
{
for (var i in po)
{
if (so[i])// if so にもこのメンバーがある
続行; so[i] = po[i] }
})( nathena,person) ;
alert(nathena.name);//return nathana
上記のコードに示すように、オブジェクトのインスタンス間継承では、親オブジェクト person が「人」の共通属性名と年齢を定義し、子オブジェクト nathena が独自のプライベート属性「性別」を定義します。関数 inlineExtends の機能は、親オブジェクト person で定義された「person」の共通属性を子オブジェクト nathena にコピーすることです。
特別な注意が必要なステートメントは、「if (so[i])」です。このステートメントは、子オブジェクトの元のメンバーが親オブジェクト内の同じ名前のメンバーによって上書きされないようにします。これはオブジェクトの規則に違反します。親オブジェクトと子オブジェクトの間の指向性の関係 - 子オブジェクトは親オブジェクトのプロパティまたはメソッドをオーバーライドおよびオーバーロードできますが、親オブジェクトは自身のプロパティまたはメソッドを子オブジェクトから隠すことしかできません。