皆さんこんにちは。今日は引き続きカプセル化について説明します。今日は、OOP の考え方における継承について説明します。
継承とは、子孫が先祖の一連の属性や行動を受け継ぐことを意味します。子孫は先祖と同じ種族であることに変わりはありません。継承とは何かを理解するために、いくつかの具体的な説明を使用してみましょう。
中国人とアメリカ人はすべて人類の祖先から受け継いだものであるため、同じ属性の動作を持っていますが、それでも特定の違いがあります。ポリモーフィズムについては後で引き続き説明するので、上の例の図を通して、私たちが明らかにすることができます。人間は実際には互いに非常に似ていることが理解できたので、以下のコード例を見ると、コードを使用して継承をシミュレートすることで、できるだけ少ないコードを記述して最大の効果を達成する方法もわかることがわかります。可能なこと。
//遗传继承函数 function Extend(Children,Parent){ //这里仅仅只是继承的原型链接定义的行为 for(var p in Parent.prototype){ Children[p] = Parent.prototype[p]; } } //人类祖先 function Human(){ this.weight = "50kg"; this.height = "180cm"; this.hair = "棕色"; } //吃饭 Human.prototype.Eat = function(){ console.log("吃饭"); } //说话 Human.prototype.Say = function(){ console.log("大家好我是地球人"); } //行走 Human.prototype.Walk = function(){ console.log("我是人类,天生就可以两条腿直立行走"); } //繁衍 Human.prototype.Multiply = function(){ console.log("跟老婆一起做羞羞的事,就是为了人类的繁荣"); } //中国人 function Chinese(){ //调用继承函数 Extend(this,Human); } //美国人 function American(){ //调用继承函数 Extend(this,Human); }
このように書いて、高級言語で継承をシミュレートして、実行後に問題があるかどうかを確認してみましょう。
このように書くことで、プロトタイプリンクの継承を実現でき、また、中国語とアメリカの関数を書くとき、ほんの少しだけ書くだけで済みます。コード量は? で、親クラスの動作を継承しており、インスタンスは親クラスが持つ動作関数を呼び出すこともできます。ただし、このように記述すると、継承は完全に実現されていません。すべては、hair 属性を呼び出すときに行われます。その後、コードを再度変更すると、完全な継承を実現できます
。//遗传继承函数 function Extend(Children,Parent){ //现在我们是从父类实例来继承,所以属性和方法都会被继承的 for(var p in Parent){ if(typeof Children[p] == "undefined"){ Children[p] = Parent[p]; } } } //人类祖先 function Human(){ this.weight = "50kg"; this.height = "180cm"; this.hair = "棕色"; } //吃饭 Human.prototype.Eat = function(){ console.log("吃饭"); } //说话 Human.prototype.Say = function(){ console.log("大家好我是地球人"); } //行走 Human.prototype.Walk = function(){ console.log("我是人类,天生就可以两条腿直立行走"); } //繁衍 Human.prototype.Multiply = function(){ console.log("跟老婆一起做羞羞的事,就是为了人类的繁荣"); } //中国人 function Chinese(){ //调用继承函数 Extend(this,new Human()); } //美国人 function American(){ //调用继承函数 Extend(this,new Human()); }
ランニング効果が私たちが想像していたものと同じかどうかを確認する必要がありますか?
上記のコードから、現在の継承関数が実際には Human クラスの特定のインスタンスからコピーされた属性と動作であることがわかります。このようにして、クラスの継承をさらにシミュレートできます。上の文ですが、まだ説明する必要があります
if(typeof Children[p] == "undefined"){ ...... }
ここで登場する typeof キーワードは、実際には、特定の変数の型をチェックするために使用される演算子であり、それが未定義の場合、演算の結果は「未定義」になるため、次のように比較します。そのような属性または動作関数が定義されている場合、それは親クラスから継承されます (注: ここでの説明は、後でポリモーフィズムへの道を開くためのものです)。
次に、多重継承が可能かどうかを見てみましょう。 Chinese クラスと American クラスの両方が Human クラスから継承することはすでに述べました。次に、中国語
を継承する別のクラスを作成しましょう。//四川人 function SiChuanMan(){ Extend(this,new Chinese()); }
これで、非常に堅牢な継承コードが作成できました。これは、新しいクラスを宣言するときにコンストラクターで継承関数を呼び出すだけで、属性と動作関数の完全な継承を実現できます。これにより、多くのコードを節約でき、OOP 思考の利点が再び反映されます。中国の各省の人々をシミュレートしたい場合、人間のクラスに従って各省を記述すると、太陽からはできなくなります。次の日日が沈むまで書き終わらない。継承の書き方はいろいろありますが、ここでは一番簡単に説明しますので、慣れてきたら好きなように書いてください。 , javascript それ自体は非常に柔軟な言語です。
要約すると、今日私たちはカプセル化の基礎をさらにアップグレードし、オブジェクトの継承を実現し、記述されるコードの量をさらに圧縮しました。考えてみれば、これにより作業の効率とエレガントさが向上します。コード、少し興奮していますか? 私の足跡をたどれば、最も複雑なことを最も簡単な方法で理解できます。実際、プログラムが複雑である理由は、誰もが理解したことがないからです。本来は非常に単純なものですが、人によって理解や解釈が異なるため、学習が複雑になります。さらに、全員を段階的に正しい方向に導くための継続的なチュートリアルもありません。長い間昇進するのは難しいです。