Heim  >  Artikel  >  Web-Frontend  >  Javascript spielt mit Vererbung (2)_Javascript-Fähigkeiten

Javascript spielt mit Vererbung (2)_Javascript-Fähigkeiten

WBOY
WBOYOriginal
2016-05-16 16:48:59975Durchsuche

Unnötig zu erwähnen, dass diese Methode einfacher zu verstehen ist, da sie den Konstruktor der übergeordneten Klasse in der Unterklasse aufruft. Darüber hinaus besteht einer der größten Vorteile dieser Methode darin, dass durch strukturelle Vererbung eine Mehrfachvererbung erreicht werden kann:

Code kopieren Der Code lautet wie folgt:

Funktion A()
{ }
function B()
{ }
function C()
{
this.father=A;
this.father();
delete this.father;
this .father=B;
this.father();
delete this.father;
}

Aber diese Methode hat auch einige Mängel:
Für diejenigen, die mit objektorientierten Methoden vertraut sind, werfen wir einen Blick auf diesen Teil des C#-Codes:

Code kopieren Der Code lautet wie folgt:

classProgram
{
staticvoid Main(string [] args)
{
B b=newB();
bool temp = (typeof(A)).IsInstanceOfType(b);
Console.WriteLine(temp);
}
}
classA
{
public A()
{

}
}
classB : A
{
public B( )
{

}
}

Was ist das Ergebnis? b ist natürlich eine Instanz von A:

Lassen Sie uns diesen Test jedoch mit dem oben genannten Javascript-Code durchführen, der strukturelle Vererbung verwendet:

Code kopieren Der Code lautet wie folgt:

Funktion A()
{ }
function B()
{ }
function C()
{
this.father=A;
this.father();
delete this.father;
this .father=B;
this.father();
delete this.father;
}
var c=new C();
alert(c instanceof A);

Aber das Ergebnis war nicht das, was wir uns vorgestellt hatten:

Tatsächlich ist es leicht zu erklären: Die strukturelle Vererbung kopiert nur die Attribute der übergeordneten Klasse, indem sie die Konstruktormethode der übergeordneten Klasse aufruft, und führt nichts anderes aus. Daher wird diese Vererbungsmethode in vielen Materialien nicht als Vererbung bezeichnet.

Während Sie die Nachteile sehen, denken Sie auch an die Vorteile: Unterstützt Mehrfachvererbung.

Schauen wir uns die Vererbung in C# an und stellen fest, dass es zwei typischste Unterschiede bei dieser Vererbung gibt: C# unterstützt keine Mehrfachvererbung und die oben erwähnten Mängel der strukturellen Vererbung. So entstand eine neue Vererbungsmethode, die wir prototypische Vererbung nannten.

Wenn Sie den Namen sehen, können Sie ungefähr verstehen, dass die prototypische Vererbung die Eigenschaften des Prototyps nutzt, um eine Vererbung zu erreichen. Dies ist die beliebteste Vererbungsmethode in Javascript. Wenn Sie Prototypen nicht verstehen, folgen Sie bitte meinem anderen Artikel: „Mit Prototypen spielen – Prototypen“.
Schauen wir uns zuerst den Code an. Hier leihe ich mir einen Code aus „Die Rückkehr des Javascript-Königs“:

Code kopieren Der Code lautet wie folgt:

Funktion Punkt (Dimension)
{
this.dimension=dimension;
this.Test=function(){
alarm("Success");
}
}
function Point2D(x,y)
{
this.x=x;
this.y=y;
}
Point2D.prototype=new Point(2);
var p=new Point2D(3,4) ;
p.Test();

Test bestanden. Es zeigt, dass Point2D die Methoden der übergeordneten Klasse geerbt hat. Schauen wir uns noch einmal die Instanz an.

alert(p Instanz von Point);

Erfolg! Okay, analysieren wir die prototypische Vererbung:

Ich werde nicht näher auf die Vorteile der prototypischen Vererbung eingehen. Die Struktur ist einfach, leicht zu verstehen und kann instanziiert werden. Aber seine Mängel sind ebenso offensichtlich. Erinnern Sie sich noch an das Beispiel „Tier, Menschen, Mädchen“ in meinem letzten Artikel? Um dies zu erreichen, verwenden wir prototypische Vererbung:

Code kopieren Der Code lautet wie folgt:

function Animal()
{
this.Run=function(){alert("I can run");}
}
function People(name)
{
this.Say=function(){alert("Mein Name ist " this.name);}
}
People.prototype=new Animal();
function Girl(name, Alter)
{
this.age=age;
this.Introduce=function(){alert("Mein Name ist " this.name ".Ich bin " this.age);}; >}
Girl.prototype=new People(???);

Bitte beachten Sie, dass die Codezeile in meinem rot fett gedruckten Teil der Prototyp von Girl ist. Daher sollten wir bei der Initialisierung von People den Namensparameter übergeben, aber der Name jedes Mädchens ist unterschiedlich, daher wird der Prototyp von Anlass 1 vererbt wenn nicht verwendet: In der Prototyp-Vererbungsphase können Sie nicht bestimmen, welche Parameter zum Initialisieren des übergeordneten Klassenobjekts verwendet werden sollen. Anlass 2: Ganz einfach, jede Klasse kann nur einen Prototyp haben, was bedeutet, dass die prototypische Vererbung nicht für die Mehrfachvererbung verwendet werden kann. Das ist eine gute und eine schlechte Sache. Denn:

Objektorientierte Sprachen wie Java und C# unterstützen ursprünglich keine Mehrfachvererbung, und Mehrfachvererbung gilt als inkonsistent mit objektorientierter

Es können nicht mehrere Schnittstellen implementiert werden!

Okay, das ist alles für heute. Zusammenfassend lässt sich sagen, dass die Prototypenvererbung einige Probleme der Strukturvererbung löst und einige neue Probleme mit sich bringt. Im Allgemeinen ist die prototypische Vererbung die am weitesten verbreitete Vererbungsmethode und auch die wahre Art, Vererbung in der Javascript-Grammatik zu implementieren!

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