Obwohl JavaScript das Schlüsselwort inheritance nicht bereitstellt, können wir dennoch einige gute Möglichkeiten finden, es zu implementieren.
1. Prototypenkettenvererbung:
var Base = function()
{
This.level = 1;
This.name = "base";
This.toString = function(){
return „base“;
};
};
Base.CONSTANT = "constant";
var Sub = function()
{
};
Sub.prototype = new Base();
Sub.prototype.name = "sub";
Vorteile: Dem Schlüsselwort „instanceof“ nach zu urteilen, ist eine Instanz sowohl eine Instanz der übergeordneten Klasse als auch eine Instanz der Unterklasse. Dies scheint die reinste Vererbung zu sein.
Nachteile: Die Attribute und Methoden einer Unterklasse, die sich von denen der übergeordneten Klasse unterscheiden, müssen nach einer Anweisung wie Sub.prototype = new Base(); separat ausgeführt werden und können nicht im Sub-Konstruktor gepackt werden. Beispiel: Sub.prototype.name = „sub“; Mehrfachvererbung kann nicht implementiert werden.
2. Konstruktionsvererbung:
var Base = function()
{
This.level = 1;
This.name = "base";
This.toString = function(){
return „base“;
};
};
Base.CONSTANT = "constant";
var Sub = function()
{
Base.call(this);
This.name = "sub";
};
Vorteile: Es kann eine Mehrfachvererbung erreicht werden und Eigenschaftseinstellungen, die nur für Unterklassen gelten, können im Konstruktor platziert werden.
Nachteil: Verwenden Sie „instanceof“, um festzustellen, dass das Objekt keine Instanz der übergeordneten Klasse ist.
3. Instanzvererbung:
Code kopieren
This.level = 1;
This.name = "base";
This.toString = function(){
return „base“;
};
};
Base.CONSTANT = "constant";
var Sub = function()
{
var-Instanz = new Base();
Instanz.name = "sub";
Instanz zurückgeben;
};
Vorteile: Es handelt sich um ein Objekt der übergeordneten Klasse, und der gleiche Effekt kann erzielt werden, wenn zum Erstellen des Objekts new verwendet wird oder zum Erstellen des Objekts nicht new verwendet wird.
Nachteile: Das generierte Objekt ist im Wesentlichen eine Instanz der übergeordneten Klasse, kein Objekt der Unterklasse. Mehrfachvererbung wird nicht unterstützt.
4. Vererbung kopieren:
Code kopieren
Der Code lautet wie folgt:
return „base“;
};
};
Base.CONSTANT = "constant";
var Sub = function()
{
var base = new Base();
for(var i in base)
Sub.prototype[i] = base[i];
Sub.prototype["name"] = "sub";
};
Vorteile: Unterstützt Mehrfachvererbung.
Nachteile: geringe Effizienz; nicht aufzählbare Methoden der übergeordneten Klasse können nicht abgerufen werden.
Diese Formulare haben ihre eigenen Eigenschaften. Was den von mir bereitgestellten Code betrifft, erfüllt er die folgende Tabelle:
2012-1-10: Ergänzung: Wenn wir keine Klassenvererbung, sondern nur Objektvererbung benötigen, können wir für Browser, die ECMAScript 5 unterstützen, auch die Methode Object.create verwenden:
var Base = function()
{
This.level = 1;
This.name = "base";
This.toString = function(){
return „base“;
};
};
Base.CONSTANT = "constant";
var sub = Object.create(new Base());
sub.name = "sub";