JavaScriptは継承されたキーワードを提供しませんが、それらを実装する良い方法をいくつか考え出すことができます。
1。プロトタイプチェーンの継承:
コードコピーは次のとおりです。
var base = function()
{
this.level = 1;
this.name = "base";
this.toString = function(){
「ベース」を返します。
};
};
base.constant = "constant";
var sub = function()
{
};
sub.prototype = new base();
sub.prototype.name = "sub";
利点:キーワードのインスタンスから判断すると、インスタンスは親クラスのインスタンスであり、子供クラスのインスタンスでもあり、これは最も純粋な継承のようです。
短所:サブクラスは、親クラスのプロパティと方法とは異なります。 sub.prototype = new base()などのステートメントの後に個別に実行する必要があります。サブコンストラクターに包むことはできません。例:sub.prototype.name = "sub";複数の継承を達成することはできません。
2。継承を構築します:
コードコピーは次のとおりです。
var base = function()
{
this.level = 1;
this.name = "base";
this.toString = function(){
「ベース」を返します。
};
};
base.constant = "constant";
var sub = function()
{
base.call(this);
this.name = "sub";
};
利点:複数の継承を実装でき、サブクラスに固有の属性をコンストラクター内に設定できます。
短所:InstanceOfを使用すると、オブジェクトが親クラスのインスタンスではないことがわかりました。
3.インスタンス継承:
コードコピーは次のとおりです。
var base = function()
{
this.level = 1;
this.name = "base";
this.toString = function(){
「ベース」を返します。
};
};
base.constant = "constant";
var sub = function()
{
var instance = new base();
instance.name = "sub";
インスタンスを返す;
};
利点:これは親クラスのオブジェクトであり、新しい効果は、新しいものを使用してオブジェクトを構築し、新しいものを使用してオブジェクトを構築することなく得ることができます。
短所:生成されたオブジェクトは、基本的にサブクラスオブジェクトではなく、親クラスのインスタンスです。複数の継承はサポートされていません。
4。継承をコピー:
コードコピーは次のとおりです。
var base = function()
{
this.level = 1;
this.name = "base";
this.toString = function(){
「ベース」を返します。
};
};
base.constant = "constant";
var sub = function()
{
var base = new base();
for(ベースのvar i)
sub.prototype [i] = base [i];
sub.prototype ["name"] = "sub";
};
利点:複数の継承をサポートします。
短所:効率が低い;親クラスで列挙できない方法を取得できません。
これらのフォームには独自の特性があり、私が提供するコードに関してのみ、次の表を満たします。
2012-1-10:クラスの継承が必要ない場合は、オブジェクト継承のみが必要です。 ECMAScript 5をサポートするブラウザの場合、Object.Createメソッドを使用して実装することもできます。
コードコピーは次のとおりです。
var base = function()
{
this.level = 1;
this.name = "base";
this.toString = function(){
「ベース」を返します。
};
};
base.constant = "constant";
var sub = object.create(new base());
sub.name = "sub";