Ich denke, jeder hat seine eigenen Meinungen darüber, ob JavaScript eine objektorientierte Sprache oder eine objektorientierte Sprache ist. Diese treuen Fans von JavaScript müssen sagen, dass JavaScript eine objektorientierte Sprache ist. Beispielsweise basiert die Aussage über JavaScript im Buch "The Return of the King of JavaScript" auf prototypen objektorientiertem. Lassen Sie mich über meine persönliche Meinung sprechen. Die drei objektorientierten Merkmale: Vererbung, Polymorphismus und Kapselung. Obwohl JavaScript nicht so schnell wie objektorientierte Sprachen wie Java und C#ist, hat es doch auch bestimmte Unterstützung. Daher ist es sinnvoll zu sagen, dass JavaScript eine objektorientierte Sprache ist, aber aus dem Vererbungsteil gibt es eine Reihe von Vererbungsmethoden, aber jede Vererbungsmethode kann die Kraft einer wirklich objektorientierten Sprache nicht erkennen. Daher ist es weit hergeholt zu sagen, dass es objektorientiert ist. Zusammenfassend ist mein Verständnis von JavaScript eher bereit, es als vereinfachte objektorientierte oder "pseudo" -Objektorientierte zu bezeichnen (dieses Pseudo-Wort hat keine abfällige Bedeutung).
Sprechen wir heute über das erste Merkmal von objektorientiertem: Vererbung.
Was ist Vererbung? Ich möchte nicht über das sprechen. Es gibt ein Tier, eine Person und ein Mädchen. Dies ist die einfachste und typische Vererbungskette.
In objektorientiertem wie C#ist es einfach.
Die Codekopie lautet wie folgt:
Klassentier
{}
Klassenmenschen: Tier
{}
Klassenmädchen: Menschen
{}
In JavaScript gibt es also keine Klasse oder Vererbung, um die Implementierung bereitzustellen. Was sollen wir tun?
Objektverkleidung (Konstruktionsvererbranzmethode)
Was ist Objekt -Tarn? Was wir als Konstrukt -Vererbung bezeichnen könnten, ist leichter zu verstehen. Wie der Name schon sagt, besteht die Verwendung von Konstruktoren, um mit Erbschaft zu spielen. Tatsächlich bedeutet dies, dass der Konstruktor der übergeordneten Klassen als gewöhnliche Methode angesehen wird und sie in den Subklass -Konstruktor zur Ausführung einbringt. Auf diese Weise kann das Subcass -Objekt beim Erstellen eines Objekts natürlich die übergeordnete Klassenmethode konstruieren!
Verwenden wir das obige Beispiel: Der Code lautet wie folgt:
Die Codekopie lautet wie folgt:
Funktion Animal ()
{
this.run = function () {alert ("Ich kann ausführen");};
}
Funktion people (Name)
{
// Hier wird die Konstruktionsmethode der übergeordneten Klasse übergeben, und dann wird die Konstruktionsmethode der übergeordneten Klasse ausgeführt. Zu diesem Zeitpunkt können die Methoden in der übergeordneten Klasse verwendet werden.
this.father = Tier;
this.father ();
// Denken Sie daran, es zu löschen, da die Unterklasse der Methode mit demselben Namen wie der übergeordneten Klasse hinzugefügt wird, wird sie an die übergeordnete Klasse geändert.
Löschen Sie diesen.
this.name = name;
this.say = function () {alert ("Mein Name ist"+this.name);}
}
Funktionsmädchen (Name, Alter)
{
this.father = people;
Dieser. Vater (Name);
Löschen Sie diesen.
this.age = Alter;
this.inTroduce = function () {alert ("Mein Name ist"+this.name+". Ich bin"+this.age);};
}
Auf diese Weise wird eine Erbschaftskette implementiert, und der Test lautet:
Die Codekopie lautet wie folgt:
var a = new Animal ();
A.run ();
var p = neue Leute ("Windking");
p.run ();
p.Say ();
var g = neues Mädchen ("Xuan", 22);
g.run ();
g.say ();
G.Interase ();
Die Ergebnisse sind wie folgt:
A.
B.
C.
D.
e.
F.
Der Test erfolgte!
Fassen wir den Schlüssel dieses Codes zusammen, geben Sie die übergeordnete Klasse an, deklarieren Sie das übergeordnete Klassenobjekt und löschen Sie dann temporäre Variablen. Glaubst du, es ist ein bisschen problematisch? Zumindest denke ich das. Sobald ich vergesse zu löschen, muss ich das Risiko tragen, dass die übergeordnete Klasse geändert wird. Dafür verwenden wir Anrufe und bewerben uns, um dies zu verbessern!
Schauen wir uns den Code und das obige Beispiel an (um es jedem zu erleichtern, es zu verstehen, die Notwendigkeit, ihn zu ändern, hat Tier einen Namen):
Die Codekopie lautet wie folgt:
Funktion Animal (Name)
{
this.run = function () {alert ("Ich kann ausführen");};
}
Funktion people (Name)
{
// Die Anrufmethode zur Implementierung der Vererbung verwenden
this.father = Tier;
this.father.call (this, Name);
this.name = name;
this.sayname = function () {alert ("Mein Name ist"+this.name;);};
}
Funktionsmädchen (Name, Alter)
{
// Verwenden Sie die Methode anwenden, um die Vererbung zu implementieren
this.father = people;
this.father.apply (this, New Array (Name));
this.age = Alter;
this.inTroduce = function () {alert ("Mein Name ist"+this.name+". Ich bin"+this.age);};
}
Unter Verwendung des gleichen Testcodes wurde festgestellt, dass der Test genauso erfolgreich war.
Wenn Sie ein Anfänger sind, fühlen Sie sich möglicherweise ein wenig schwindelig, wenn Sie sich die beiden Codes unten ansehen. Was ist Call und was gilt? OK, im besonderen Thema des Wanzhuan -Erbs habe ich eine ergänzende Ausgabeserie hinzugefügt. Wenn Sie dies nicht verstehen, können Sie meinen Artikel lesen: "Wort von Wanzhuan: Rufen Sie an und bewerben Sie sich.
Objektverkleidung ist nur eine Möglichkeit, die Vererbung zu implementieren. Im nächsten Artikel werde ich weiterhin über andere Erbschaftsmethoden und die Vor- und Nachteile mehrerer Vererbungsmethoden schreiben. Willkommen, weiterhin darauf zu achten.