詳細多型とカプセル化の原則を達成するために、JavaScriptの継承

オブジェクト指向の三つの特徴

パッケージ

抽象クラスとしてパッケージ客観的なものであり、クラスがそのデータとメソッドは、信頼できない情報に隠れて、信頼できるクラスやオブジェクトの操作を可能に置くことができる、いわゆるパッケージ。パッケージは、オブジェクト指向の概念の特徴及びオブジェクトクラスの主な特性の一つです。簡単に言えば、このクラスは、データとオペレーションコードデータをカプセル化する論理エンティティです。内部オブジェクトでは、いくつかのコードまたはいくつかのデータがプライベートであってもよく、世界の外にアクセスすることはできません。このように、内部データオブジェクトは、オブジェクトのプライベート部分のプログラム無関係または不適切な使用の偶発的変更部を防ぐために、保護の異なるレベルを提供します。

私たちのコードはより簡潔なように我々は、VUEのプロジェクトに必要な各コンポーネントに混入混合コードの公開を使用し、作成します

私たちのコードはより簡潔なように、我々はまた、コードの再利用を実現するために、いくつかの一般的な方法、ツールパッケージすることができ

受け継ぎます

いわゆる継承は、別の種類のオブジェクトのプロパティを取得するための方法のタイプのオブジェクトを作ることができるものです。これは、バイレベルの分類の概念をサポートしています。継承は、そのような能力を意味する:それは、既存のクラスのすべての機能を使用し、これらの機能を書き換えることなく、元のクラスの場合に拡張することができます。いわゆる「サブクラス」または「派生クラス」、「基本クラス」と呼ばれる継承されたクラス、「親」または継承して新しいクラスを作成し、「スーパークラスを。」一般から特定のプロセスに、ある連続プロセス。継承を達成するために、「継承」(継承)と「組み合わせ」(組成物)によって達成することができます。実装の継承とインターフェイスの継承:継承の概念の実装は、2つのカテゴリがあります。直接継承プロパティとメソッドの基本クラスで、追加のコーディング機能なしを意味し、インターフェースは、名前の唯一の属性とメソッドを使用することですが、サブクラスが達成する能力を提供しなければならない継承。

いくつかの方法で継承

コール継承

(){機能
this.c = 111 
} 
関数B(){ 
a.call(本)
} 
せD =新しいB()
はconsole.log(DC)// 111を

上記のコードでは、関数Bは、この親の継承を変更することにより、プライベートプロパティを継承した機能に対応します

原型継承

(){機能
this.c = 111 
} 
a.prototype.getName =関数(){ 
リターン'你好' 
} 
関数B(){ 
// a.call(本)
} 
b.prototype =新しい()
Bを.constructor = Bの
LET D =新しいB()
はconsole.log(DC)// 111 
はconsole.log(d.getName())//你好

親クラスのサブクラスを割り当てることによって、プロトタイプのプロトタイプ継承の例として、このメソッドはサブクラスは親クラスの親クラスのプライベートプライベートメソッドを継承することができます継承します

継承の寄生組み合わせ

()関数{ 
this.cを= 111 
} 
a.prototype.getName =関数(){ 
リターン'你好' 
} 
関数B(){ 
a.call(本)
} 
b.prototype = Object.create(a.prototype )
D =新しいB()せ
にconsole.log(DC)// 111 
//)はconsole.log(d.getName()你好

寄生継承は、公共の継承を実現object.create民間、公共の使用のprivate継承を実現するために、これを変更するには継承されたコールの組み合わせを使用することです

ES6は、継承を拡張します

クラス親{ 
コンストラクタ(){ 
this.a = 1 
} 
名(){ 
リターン2 
} 
} 
クラスの子は親を拡張{ 

} 
Aが=新しい子()とする
にconsole.log(AA)// 1 
はconsole.log(A.name ())// 2

ここではそれ以外の場合は、スーパーエラーを記述する必要があります、民間達成し、キーワードはサブクラスが、コンストラクタ内で書かれた場合には注意すべきで、拡張によって公共サブクラスは親クラスを継承しています

クラスの親{ 
コンストラクタ(){ 
this.a = 1 
} 
名(){ 
リターン2 
} 
} 
クラスの子が親の拡張{ 
コンストラクタ(){ 
//这里不写スーパー会の报错を、报错信息如下
} 
} 
// ncaughtにReferenceError:必要があります「この」をアクセスしたり、新しい子で派生コンストラクタから戻る前に、派生クラスでスーパーコンストラクタを呼び出します

ポリモーフィズム

多型はクラスの同じインスタンスのいわゆる方法を指すは、異なる状況において異なる形態を有します。多型の異なる内部構造を有するオブジェクトが同じ外部インターフェイスを共有できるようにします。これは、異なるオブジェクトごとに異なる特定のアクションが意味するが、一般的なクラスを介して、彼ら(これらの操作は)同じように呼び出すことができます。

オーバーロード

同じスコープ内手段の過負荷機能は、機能のセットが過負荷関数と呼ばれ、同じ関数名を有する基、異なるパラメータの関数のリストがあってもよいです。オーバーロード機能が正常に機能し同様の機能のセットに名前を付けるために使用され、これは読みやすくするために、大きな利点を名前空間の汚染を避けるために、関数名の数を減らすことができます。

  • JS関数名による、対応する関数オブジェクトを見つけます
  • 次いでないパラメータに従って機能に基づいて、パラメータリスト、および発現が追加パラメータを廃棄、一致させるために定義されている場合、未定義のプロセスのようなパラメータ
  • 次に、関数のコードを実行します。
//引数の数は、データの過負荷で達成することができる
機能を追加(){ 
VARのSUM = 0; 
{(; Iはarguments.lengthをを<I ++はVAR I = 0)ため
SUM + =引数[I]; 
} 
戻りSUM ; 
} 
にconsole.log(ADD())// 0 
はconsole.log(ADD(1,2))// 3。
はconsole.log(ADD(1,2,3))// 6。

リライト

「だけではなく、コンストラクタに試作例へのポインタ。」

「プロトタイプオブジェクトの書き換えは、オブジェクトのインスタンスと、以前に存在していた既存のプロトタイプとの関係を断絶し、彼らが、まだ最初のプロトタイプである参照してください。」

VaRの親=機能(名前、年齢){ 
this.name =名; 
this.age =年齢; 
} 

parent.prototype.showProper =関数(){ 
にconsole.log(this.name + ":" + this.age)。
} 

VAR子=関数(名前、年齢){ 
parent.call(この、名前、年齢)。
} 

//継承
child.prototype = Object.create(parent.prototype)。
// child.prototype =新しい親(); 
child.prototype.constructor =子。

//関数の書き換え
child.prototype.showProper =機能(){ 
はconsole.log( ":" + this.name + '私は' + this.ageを)。
} 

VAR OBJ =新しい子( 'wozien'、 '22'); 
obj.showProper();

寄生継承、実装サブクラス親プライベートプライベート継承の組み合わせを用いて、上記のコードは、サブクラスは親クラスshowProperをオーバーライドするために、親クラス公開公開継承します

オブジェクト指向の5つの原則

  • 単一責任の原則
  • オープンクローズ原理
  • 置換原則
  • 依存関係の原則
  • 分離インターフェースの原則

単一責任の原則

シングル責任の原則が、それは今、このようなプロジェクトの構造我々は一つだけの話されている方法である、それは単一責任の原則を次の

オープンクローズ原理

オープンクローズ原理は、拡張子にオープン、修正のために閉鎖されます

クラス{ 
()を追加{ 
返す11 
} 
} 
クラスBが延びる{ 

} 
C =新しいB()せて
はconsole.log(c.add())// 111

私たちは使用することができますが、その後の拡張にオープン、修正のために閉じ達成、B内の追加機能を変更することができ、親クラスを継承する拡張

すなわち、この記事のためにすべてです、私は学習を支援したいです

また、記事に興味がある可能性があります。

記事の同時リリース:  https://www.geek-share.com/detail/2775366797.html

おすすめ

転載: www.cnblogs.com/xxcn/p/11267831.html