何かをする前に、最初にそれを行うことの利点について明確にする必要があります。私は誰も理由もなく物事をやるつもりはないと信じています。一般的に、クラスを設計するとき、実際にコードの重複を減らすことを望んでいます。継承を使用すると、これを完全に行うことができます。継承メカニズムの助けを借りて、既存のクラスに基づいて再び設計し、すでに持っているさまざまな方法を最大限に活用し、設計をより簡単に変更できます。私はそれほどナンセンスとは言いません、例を挙げてください:
コードコピーは次のとおりです。
function person(name){
this.name = name;
}
person.prototype.getName = function(){
this.nameを返します。
}
function bloger(name、blog){
person.call(this、name);
this.blog = blog;
}
var bloger = new bloger( "zhen"、 "// www.vevb.com");
alert(bloger.name == "zhenn"); /*tureに戻る*/
alert(bloger.blog)/*tip//www.vevb.com*/
alert(bloger.getName()== "zhenn"); /*tip "bloger.getNameは関数ではありません"*/
上記の例から、ブログはその内部の呼び出しを通じて、親クラスの人のネイティブプロパティと方法を動的に呼び出すことがわかります(呼び出しの説明については、//www.vevb.com/article/62086.htmを参照してください)。ただし、慎重な学生は、人のプロトタイプオブジェクトのメソッドを通話のみに依存することで継承できないことがわかります。そのため、「bloger.getNameは関数ではない」とプロンプトします。ただし、心配しないでください。上記のコードに対処して、この問題を解決してください!
コードコピーは次のとおりです。
function person(name){
this.name = name;
}
person.prototype.getName = function(){
this.nameを返します。
}
function bloger(name、blog){
person.call(this、name);
this.blog = blog;
}
/*次の2行のコードに注意してください*/
bloger.prototype = new Person();
bloger.prototype.constructor = bloger;
var bloger = new bloger( "zhen"、 "// www.vevb.com");
alert(bloger.name == "zhenn"); /*tureに戻る*/
alert(bloger.blog)/*tip//www.vevb.com*/
alert(bloger.getName()== "zhenn"); /* prompt true*/
ここでは、これら2つのコードを説明する必要があります。各コンストラクターにはプロトタイプ属性があり、コンストラクターのプロトタイプオブジェクトを指すことがわかります。実際、プロトタイプオブジェクトはインスタンスオブジェクトでもありますが、プロトタイプオブジェクトで定義されている属性とメソッドは、すべてのインスタンスオブジェクトに共有するように提供できます。このことから、2行のコードを追加する意図は、サブクラスのプロトタイプオブジェクトを設定して親クラスのインスタンス化されたオブジェクトを指すことであり、親クラスのインスタンス化されたオブジェクトは、親クラスのすべてのプロトタイプ属性メソッドを継承します。サブクラスのプロトタイプは、すべての親クラスインスタンスオブジェクトのプロパティとメソッドを継承します。
ただし、Bloger.prototype.constructor = blogerにも注意する必要があります。このコード行は、サブクラスのプロトタイプが親クラスのインスタンスに設定されている場合、そのコンストラクター属性が親クラスを指すため、サブクラスプロトタイプのコンストラクターを再びサブクラスを指すように設定する必要があるためです。この時点で、JavaScriptのクラス継承は完全に実装されています!
サブクラスの宣言を簡素化するために、サブクラスを拡張するプロセス全体を、特定のクラス構造に基づいて新しいクラスを作成するための拡張機能で記述できます。
コードコピーは次のとおりです。
関数拡張(保育、parentclass){
var f = new function();
f.prototype = parentclass.prototype;
childclass.prototype = new f();
childclass.prototype.constructor = childclass;
}
この拡張機能を使用すると、サブクラスを簡単に拡張できます。この関数を呼び出すだけです。上記で追加された2行のコードは、完全な継承を達成することもできます(ブログ、パーソン)に変更できます。