コンストラクタ、プロトタイプオブジェクト、継承

コンストラクタ

我々はと呼ばれる新しいオブジェクトを作成するとき、コンストラクタ関数が使用されています。これまでのところ、我々は組み込みのコンストラクタ、例えば、オブジェクト、配列および機能の多くのことを学びました。同じのコンストラクタを使用して作成したオブジェクトは、同じプロパティとメソッドを持っています。内蔵のコンストラクタこれらに加えて、我々はまた、独自のコンストラクタを作成することができます。

コンストラクタは、関数である、と同じの方法通常の関数を定義します。唯一の違いは、他の機能と区別するために、コンストラクタの名前の最初の文字を大文字にしなければならないということです。以下は、空の関数人を定義します。

機能人(){ 
    
}

コンストラクタ後で定義され、あなたがオブジェクトを作成するために使用することができ、例えば、以下の2つのオブジェクトが人のコンストラクタを使用して作成しました。

だっ PERSON1 = 新しい人();
だっ PERSON2 = 新しい人();

私たちは、new演算子の呼び出し機能を使用する場合は、内部関数は自動的にその型の新しいオブジェクトを作成します。関数呼び出しが完了すると、オブジェクトは自動的に外部関数に返されます。私たちは、PERSON1とPERSON2は、Person型のオブジェクトのインスタンスであるかどうかを確認するためにinstanceof演算子を使用することができます。

console.log(PERSON1 のinstanceof人)。  //  
にconsole.log(PERSON2 のinstanceof人)。  // 

Person型のインスタンスをチェックする演算子instanceofを使用した場合、彼らは真を返すように、人のコンストラクタによってPERSON1とPERSON2ので、作成されます。

実際には空のコンストラクタ、無使用を宣言します。コンストラクタの目的は、簡単に同じ属性とメソッドを持っている多くのオブジェクトを作成することです。私たちは、この例のように、関数内でthisキーワードによって新しく作成されたオブジェクトを使用することができます。

関数人(名前){
     この .myName = 名。
    この .sayName = 関数(){ 
        にconsole.log(この.myName)。
    } 
}

MYNAME各オブジェクトは、独自の特性を有しているので、sayName()メソッドは、オブジェクトに応じて異なる値を返すことができます。

プロトタイプオブジェクト

prototypeプロパティ

その内部プロパティ__proto__トラックのプロトタイプオブジェクトを介してオブジェクトのインスタンス。この属性の値がメモリアドレス(ポインタ)であり、プロトタイプオブジェクトのインスタンスへポイント(継承します)。私たちは、新しいオブジェクトを作成するために、新しいを使用する場合、プロトタイプオブジェクトのコンストラクタは、新しいオブジェクト__proto__プロパティに割り当てられます。次の図は、指向性__proto__プロパティを示しています。

プロトタイプオブジェクトチェーン

プロトタイプオブジェクトので、独自のプロトタイプオブジェクトがあり、プロトタイプオブジェクトの属性継承オブジェクトです。これは、オブジェクトのプロトタイプチェーンです:オブジェクトは、そのプロトタイプオブジェクト、そのプロトタイプオブジェクト継承プロトタイプオブジェクトを継承し、というように。

オブジェクトのプロパティを読み取るときに、JavaScriptエンジンは、最初のオブジェクトの独自のname属性でプロパティを検索することができます。FOUNDが返されます。あなたは自分の財産プロパティが含まれていない場合は、JavaScriptはプロトタイプオブジェクトがチェーンに沿ってプロトタイプオブジェクト属性検索します。場合見つかったリターンは、それ以外の場合はundefinedを返します。

継承

作成する方法を学ぶことは最初のステップは、オブジェクト指向プログラミングを理解することであるオブジェクト。第二段階は、継承を理解することです。伝統的なオブジェクト指向言語では、クラスは他のクラスからプロパティを継承します。しかし、JSで、オブジェクト間のクラスの継承が発生しないことができる場合です。あなたは既に精通していることをこの継承メカニズムは、プロトタイプオブジェクト継承プロパティです。

プロトタイプオブジェクトの継承

JS構築されたプロトタイプオブジェクトの継承チェーンは、それはプロトタイプオブジェクトの継承を呼び出すことができ、継承と呼ばれています。我々はそれの前で話すように、オブジェクトのプロトタイプのプロパティは、継承の形態であるオブジェクト・インスタンスを、アクセスすることができます。オブジェクトのインスタンスは、プロトタイプオブジェクトの属性を継承します。

我々は特に指定しない限り、我々は自動的に、カスタムを作成するために、Objectコンストラクタからオブジェクトに継承されたものを含むすべてのオブジェクト、。むしろ、すべてのオブジェクトはのObject.prototypeから継承されます。オブジェクトリテラル形式で作成された任意のオブジェクトは、それを意味する自動のObject.prototypeに設定され__proto__そのプロパティの値は、のObject.prototypeプロパティを継承します。

変更のObject.prototype

すべてが継承プロパティとメソッドのObject.prototypeオブジェクトをオブジェクト。次の例に示すように、のObject.prototypeを添加する方法。

Object.prototype.add = 関数(値){
     戻り 、この +の値を、
}。

すべての種類のオブジェクトに継承されますオブジェクトのプロパティに追加のObject.prototype、時々書き込みは意味がない、とも間違っている可能性があります。Object.prototypeオブジェクトを変更しないでください。

オブジェクトの継承

オブジェクトの継承は、最も単純な継承です。私たちが行う必要がある唯一のものは、新しいオブジェクトのプロトタイプオブジェクトであるオブジェクトを指定しています。オブジェクトリテラル形式は、暗黙のうちにそのプロトタイプオブジェクトを指定のObject.prototype、我々はObject.create()メソッドを明示的に指定プロトタイプオブジェクトを使用することができます。

Object.create()メソッドは、2つのパラメータを取ります。最初のパラメータは、新しいオブジェクトのプロトタイプオブジェクトに設定します。二番目のパラメータは、新しいオブジェクトの属性のために、選択されています。

文の二種類が同じ効果、タイトルを持つオブジェクトの単一の属性の形式を定義するために使用される最初のオブジェクトリテラル文を持っています。オブジェクトが自動的のObject.prototypeから継承され、そのプロパティは、設定、列挙や書き込みをデフォルトに設定されています。Object.create()メソッドを使用して2番目のステートメントは、明示的に同じ操作をしました。まったく同じ動作2つのオブジェクト。この書き込みは意味を持たない私たちが書く必要はありませんので、しかし、デフォルトのオブジェクトリテラルの定義を使用すると、のObject.prototypeを継承します。他のオブジェクトから継承され、さらに興味深いものです。

おすすめ

転載: www.cnblogs.com/zhengedeboke/p/12076216.html