Heim >Web-Frontend >js-Tutorial >Zusammenfassung von 4 Möglichkeiten zur Implementierung der Vererbung in JavaScript_Javascript-Kenntnissen

Zusammenfassung von 4 Möglichkeiten zur Implementierung der Vererbung in JavaScript_Javascript-Kenntnissen

WBOY
WBOYOriginal
2016-05-16 16:33:581026Durchsuche

Obwohl JavaScript das Schlüsselwort inheritance nicht bereitstellt, können wir dennoch einige gute Möglichkeiten finden, es zu implementieren.

1. Prototypenkettenvererbung:

Code kopieren Der Code lautet wie folgt:

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

Der Code lautet wie folgt: var Base = function() {
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:

var Base = function() { This.level = 1; This.name = "base"; This.toString = function(){
           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:

Code kopieren Der Code lautet wie folgt:

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";


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn