:JSオブジェクト指向プログラミング
ES5で私たちは、オブジェクト指向プログラミングのアプローチを記述しようとしています。
人関数(名){ // 内部のコンストラクタメソッドとプロパティ この ._name = 名; この .getName = 関数(){ にconsole.log(この._name); }; この .setName = 関数(名前){ この = ._name 名; }; } letの P = 新しい新しい人("ジョン・ドウ" ); p.getName(); // 張 p.setName("ジョン・ドウ" ); p.getName(); // ジョン・ドウ
ES6では、オブジェクト指向プログラミングを書き込むための新しい方法を提供し、この方法は執筆のオブジェクト指向の方法に近いですが、それ自体が唯一のシンタックスシュガーです。
//クラスの定義
クラスの人は{ // クラス、インスタンスのコンストラクタが実行されたときに新しい コンストラクタ(名前){ この ._name = 名; } のgetName(){ にconsole.log(この._name); } setName(名前){ この ._name = 名 } } のlet P =新しい新しいpreson( 'ジョン・ドウ') p.getName();
// 張 p.setName('ジョン・ドウ' ); p.getName(); / / ジョン・ドウ
II:オブジェクト指向の三つの特徴
三つの特徴があります:カプセル化、ポリモーフィズムと継承
1:パッケージ
メソッドとクラス我々は通常、我々は開発手法を投影したときに、機能コードは、いくつかの再利用可能な多くの場所は、我々は彼が単一の関数にパッケージ化することができたときに遭遇したので、私たちが必要とされ、カプセル化に使用されていますそれを使用する直接電話をかけます。
2:継承
継承は、主に以下の書き込みのES6継承されたメソッドで、親クラスが継承するサブクラスのための私たちのプロジェクトの開発に使用されています
クラスの父{
コンストラクタ(名前){ この ._name = 名; }
//インスタンスメソッド、オブジェクト呼び出しのインスタンス のgetName(){ にconsole.log(この._name); }
//静的メソッドは継承されず、クラス名を呼び出すために
、{()静的hitXiaoMingを
console.log( "ボブを演じます" )
}
} クラス息子{拡張父 コンストラクタ(名前、年齢){ 持っている必要がありますスーパーここ(親クラスのサブクラスに渡されるときに、親の中での超パラメータがインスタンス化することによって継承される//ハンドルクラスのインスタンスデータ必要なデータ) スーパー(名); この ._age = 年齢; } } VAR大明= 新しい新しい父('明' );
Father.hitXiaoMing(); //打小明
DaMing.getName(); //大明
VAR暁明=新しい息子( '小の明'、15 );
XiaoMing.getName(); //小明
特記事項:インスタンスの属性とメソッドは、インスタンスだけに、クラス名を介して起動することができ、親クラス、継承されない静的プロパティと静的メソッドと静的メソッドを継承する継承されました。
3:ポリモーフィズム
多型は、メソッドのオーバーロードとメソッドのオーバーライドを明らかに:
メソッドのオーバーロード:過負荷が同じ関数名を使用して異なる機能が、パラメータの異なる数または機能の種類を指します。コールは、関数のパラメータに応じて異なる機能を区別する場合
メソッドオーバーライド:リライタブル(別名カバレッジ)が再基底クラス、仮想関数(仮想関数に注意)派生クラスで再実装を意味します。これは、関数名、パラメータは同じです、ただではない同じ実現の機能
レッツ応じて上記の例には、メソッドを書き換える作業のビットを追加する方法を示しています。
クラス父{ コンストラクタ(名前){ この ._name = 名; } //インスタンスメソッド、オブジェクト呼び出しのインスタンス のgetName(){ にconsole.log(この._name); }
ワーク(){
にconsole.log(「仕事)その家族をサポートするためにお金を稼ぐために一生懸命働いている
} //静的メソッドは継承されていない、とクラス名でコールする 静的hitXiaoMingを(){ はconsole.log(『暁明を打つ』) } } クラスは、息子の父{拡張し 、コンストラクタを(名前、年齢){ //インスタンスは、親クラスにクラスデータのサブクラスを扱う(スーパーここ持っている必要があり、スーパーのパラメータが必要なインスタンス化することによって継承された親クラスのデータです) スーパー(名); この._age = 年齢; }
仕事(){
はconsole.log( '私の仕事は、毎日を学ぶことです。')
}
} ヴァール大明= 新しい新しい父(「明」); DaMing.work()// 私の仕事は、その家族をサポートするためにお金を稼ぐために一生懸命働いています。
VaRの暁明= 新しい新しい息子(' ボブ'、15 );
XiaoMing.work(); //私の仕事は毎日学ぶことです。
私たちは、親クラスの仕事()メソッドを書き換えるの上。
利点の3つの機能:
パッケージ:パッケージには、唯一のクラス属性内で動作することができます定義の利点は、これらの属性は、上記で定義されただけで、あなたのカプセル化法により、変更するために、外部の障害を見つけることができない持っています。
継承:遺伝コードの冗長性を減らす、繰り返し符号数が省略され、開発者は、カップリングの目的を達成するために、すべてのサブクラスは、親クラスの底からいくつかの属性およびメソッドを持って定義することができます。
多型:多型は、パーソナライズされた方法を達成するために、別のサブクラスは、特定の条件に応じて異なる方法で実装することができ、光は、親クラスの定義方法が伸びの特殊な状況を満たすのに十分柔軟ではない持っています