ホームページ > 記事 > ウェブフロントエンド > JSの継承 ~プロトタイプチェーンの継承とクラスの継承~基礎知識
継承とは何ですか?回答: 他人がそれをあなたに無料で与えるプロセスは、相続と呼ばれます。
なぜ継承を使用するのでしょうか?答え: 既製のものを手に入れるだけです。
そうですね、誰もがすでに利用可能なものを使いたいので、それを継承する方法を学ぶ必要があります。
理解する前に、コンストラクター、オブジェクト、プロトタイプ チェーン...
などの概念を理解する必要があります。JS で一般的に使用される 2 つの継承メソッド:
プロトタイプチェーンの継承:
//新しいオブジェクト
var child = proInherit(parent);
//Test
alert(child.name); //"baba"
child.say(); //"私は baba"
proInherit (obj) メソッドを使用してオブジェクトを渡し、オブジェクトの属性とメソッドの継承を実現します。このメソッドは組み込みメソッドではないため、自分で定義する必要があります。
ここで、F() は一時的な空のコンストラクターであり、F() のプロトタイプは親オブジェクトとして設定されますが、同時に _proto_ リンクの恩恵を受けることで親オブジェクトのすべての機能を持ちます。
チェーン図:
クラス継承:
//サブクラス コンストラクター
function Child() {
this.name = "cc";
}
//クラス継承
classInherit(Parent, Child);
//Instance
var child = new Child();
alert(child.getName()) //“baba”
継承の主要なメソッドを見てみましょう: classInherit(Parent,Child)
このメソッドを分析します:
チェーン図:
このメソッドはインスタンス時にプロトタイプメソッドを継承しますが、親クラスの属性は継承できません。 以下はクラス継承の補足である
コピー継承です。
継承のコピー:
//親を書き換えます
function Parent() {
this.name = "pp";
this.obj= {a:1,b:2};
this.arr = [1, 2]
}
//インスタンス
var child = new Child();
varparent = new Parent();
copyInherit(parent, child);
alert(child.name) //"baba"
alert(child.arr) //1,2
alert(child.obj.a) //1
copyInherit(p,c) を分析します
変数に値を割り当てる場合、値渡しと参照渡しの 2 つの方法があります。親オブジェクトの属性に配列型またはオブジェクト型が含まれる場合、c[i] = toStr.call(p[ i] ) == astr ? [] : {}; この文は、子オブジェクトのプロパティを変更するときに親オブジェクトのプロパティが改ざんされるのを防ぎます。
概要:
このコンストラクター メソッドは誰もがよく知っているため、クラス継承の方が一般的ですが、大量のメモリを消費します。プロトタイプの継承は使用するメモリの量が少なくなりますが、配列やオブジェクト型のクローンを作成するのはより面倒です。コピーの継承はシンプルで広く使用されています。