Heim Web-Frontend js-Tutorial Warum müssen Sie JavaScript verwenden, um die Vererbung zu implementieren? Ausführliche Erläuterung von Beispielen verschiedener Vererbungsmethoden

Warum müssen Sie JavaScript verwenden, um die Vererbung zu implementieren? Ausführliche Erläuterung von Beispielen verschiedener Vererbungsmethoden

Jul 20, 2017 pm 03:55 PM
javascript js Warum

Warum müssen Sie JavaScript verwenden, um die Vererbung zu implementieren?

Die Leistung früher PC-Maschinen ist wirklich nicht schmeichelhaft. Der gesamte Druck liegt auf der Serverseite und dem Client-Browser dient lediglich der Dekoration. In Verbindung mit dem damals beliebten Tabellenlayout und dem Internetzugang über die Telefonleitung war das Surfen auf Webseiten sehr langsam; heute entwickelt sich das Internetzeitalter rasant, die Hardware von PCs wurde erheblich verbessert und auch die Leistung von Client-Browsern ist sehr enttäuschend. Auch das Modell der Webentwicklung verändert sich stillschweigend: Der Server soll nicht mehr so ​​„hart“ sein wie bisher. Auf diese Weise soll der Druck auf jeden einzelnen Client verteilt werden Durch die Kosteneinsparung im Unternehmen wird auch die Web-Front-End-Entwicklung interessanter – es entstehen immer mehr Front-End-Frameworks und sogar viele Front-End-MVC-Frameworks. In diesem Zusammenhang besteht die Rolle von JavaScript definitiv nicht nur darin, eine einfache Überprüfung durchzuführen, einige Anforderungen zu senden oder ein DOM zu betreiben. Es muss mehr Rollen wie Front-End-Routing und Business-Schicht übernehmen, und JavaScript muss viele logische Aufgaben übernehmen Aufgaben, die die Abstraktion von Front-End-Daten (d. h. Modellen) umfassen, und nur durch die Verwendung von objektorientiertem Denken können die abstrahierten Daten gut verarbeitet werden, daher ist die Vererbung hier sehr wichtig.

Extrahieren Sie nun ein Modell mit dem Namen „Person“ aus dem Front Desk, das über die Grundattribute „Name“ und „Alter“ verfügt. Standardmäßig kann jeder sprechen, sodass die Sprechfunktion für jede Instanz zum Genießen vorhanden ist. Nun muss der Mensch die grundlegenden Eigenschaften der Person erben und auf dieser Basis seine eigenen einzigartigen Eigenschaften hinzufügen.


function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man() {
  //my own properties
}
Nach dem Login kopieren

Mehrere gängige Vererbungsmethoden:

1. Prototypenkettenvererbung


function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man() {
}
Man.prototype = new Person('pursue');
var man1 = new Man();
man1.say(); //hello, my name is pursue
var man2 = new Man();
console.log(man1.say === man2.say);//true
console.log(man1.name === man2.name);//true
Nach dem Login kopieren

Diese Vererbungsmethode ist sehr direkt. Um alle Attributmethoden von Person (Instanz und Prototyp) zu erhalten, fügen Sie direkt die Instanz der übergeordneten Klasse neue Person('purpose') hinzu. ) wird dem Prototyp der Unterklasse zugewiesen. Tatsächlich sind die Instanzen der Unterklasse man1 und man2 selbst völlig leere Objekte. Alle Eigenschaften und Methoden müssen in der Prototypenkette gefunden werden, sodass die gefundenen Eigenschaften und Methoden gleich sind.
Daher ist es unrealistisch, die Prototyp-Kettenvererbung direkt zu nutzen.

2. Konstruktorvererbung verwenden


function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
//Man.prototype = new Person('pursue');
var man1 = new Man('joe');
var man2 = new Man('david');
console.log(man1.name === man2.name);//false
man1.say(); //say is not a function
Nach dem Login kopieren

Hier gelten die Unterklassen im Konstruktor, um den übergeordneten Konstruktor aufzurufen Um den Effekt des Erbens der Eigenschaften der übergeordneten Klasse zu erzielen, ist es viel besser, die Prototypenkette direkt zu verwenden. Mindestens jede Instanz verfügt über einen eigenen Anteil an Ressourcen. Diese Methode kann jedoch nur die Instanzeigenschaften erben Die übergeordnete Klasse ist daher besser zu finden. Ohne die Say-Methode muss die Prototypenkette geändert werden, um alle Eigenschaften und Methoden der übergeordneten Klasse zu erben, wodurch die kombinierte Vererbungsmethode eingeführt wird.

3. Kombinationsvererbung


function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
Man.prototype = new Person();
var man1 = new Man('joe');
var man2 = new Man('david');
console.log(man1.name === man2.name);//false
console.log(man1.say === man2.say);//true
man1.say(); //hello, my name is joe
Nach dem Login kopieren

Es ist zu beachten, dass die Instanzattribute von man1 und man2 tatsächlich den Prototyp überschreiben attributes , aber es besteht keine Notwendigkeit, die say-Methode auf dem Prototyp zu überschreiben (da sie nicht vorhanden ist), daher gibt man1.say === man2.say hier immer noch true zurück, Sie müssen also sehr vorsichtig mit dem Prototyp sein Eigenschaften, die nicht überschrieben werden, da sie allen Instanzen von gemeinsam sind.

4. Parasitäre Kombinationsvererbung

Um ehrlich zu sein, weiß ich nicht, wie die folgende Form heißt, aber sie ist tatsächlich die beliebteste und klassische JavaScript-Vererbungsmethode. Tatsächlich müssen Sie nur die Struktur des Prototypobjekts verstehen:


function Person (name, age) {
      this.name = name;
      this.age = age;
    }
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
Man.prototype = Object.create(Person.prototype);//a.
Man.prototype.constructor = Man;//b.
var man1 = new Man('pursue');
var man2 = new Man('joe');
console.log(man1.say == man2.say);
console.log(man1.name == man2.name);
Nach dem Login kopieren

Tatsächlich besteht der einzige Unterschied zwischen der parasitären kombinierten Vererbung und der oben genannten Kombination Vererbung ist die Konstruktion des Unterklassen-Prototypobjekts (a. und b.). Hier wird die Methode Object.creat(obj) verwendet, die eine flache Kopie des eingehenden obj-Objekts erstellt, ähnlich wie:


function create(obj){
  function T(){};
  T.prototype = obj;
  return new T();
}
Nach dem Login kopieren

Daher verbindet a das Prototypobjekt der Unterklasse gut mit dem Prototypobjekt der übergeordneten Klasse, anstatt den Prototyp der Unterklasse direkt zu kopieren, wie es bei der allgemeinen kombinierten Vererbung der Fall ist (Zum Beispiel Man.prototype = new Person();), dies ist nur ein sehr heftiges Überschreiben von Eigenschaften. Die Methode der parasitären Kombinationsvererbung erbt Instanzattribute und Prototypattribute separat, was in der Implementierung sinnvoller ist.

Hinweis: Code b ändert das Ergebnis von „instanceof“ nicht, ist jedoch strenger für Szenarien, in denen ein Konstruktor erforderlich ist.

Das obige ist der detaillierte Inhalt vonWarum müssen Sie JavaScript verwenden, um die Vererbung zu implementieren? Ausführliche Erläuterung von Beispielen verschiedener Vererbungsmethoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Bedarf die Produktion von H5 -Seiten eine kontinuierliche Wartung? Bedarf die Produktion von H5 -Seiten eine kontinuierliche Wartung? Apr 05, 2025 pm 11:27 PM

Die H5 -Seite muss aufgrund von Faktoren wie Code -Schwachstellen, Browserkompatibilität, Leistungsoptimierung, Sicherheitsaktualisierungen und Verbesserungen der Benutzererfahrung kontinuierlich aufrechterhalten werden. Zu den effektiven Wartungsmethoden gehören das Erstellen eines vollständigen Testsystems, die Verwendung von Versionstools für Versionskontrolle, die regelmäßige Überwachung der Seitenleistung, das Sammeln von Benutzern und die Formulierung von Wartungsplänen.

Warum sind die Inline-Block-Elemente falsch ausgerichtet? Wie löst ich dieses Problem? Warum sind die Inline-Block-Elemente falsch ausgerichtet? Wie löst ich dieses Problem? Apr 04, 2025 pm 10:39 PM

In Bezug auf die Gründe und Lösungen für falsch ausgerichtete Darstellung von Inline-Block-Elementen. Beim Schreiben von Webseitenlayout stoßen wir oft auf einige scheinbar seltsame Anzeigenprobleme. Vergleichen...

Warum werden die lila abgeschnittenen Bereiche im Flex -Layout fälschlicherweise als 'Überlaufraum' betrachtet? Warum werden die lila abgeschnittenen Bereiche im Flex -Layout fälschlicherweise als 'Überlaufraum' betrachtet? Apr 05, 2025 pm 05:51 PM

Fragen zu lila Schrägstrichen in Flex -Layouts Bei der Verwendung von Flex -Layouts können Sie auf einige verwirrende Phänomene stoßen, wie beispielsweise in den Entwicklerwerkzeugen (D ...

Was sind die Vorteile der H5 -Seitenproduktion Was sind die Vorteile der H5 -Seitenproduktion Apr 05, 2025 pm 11:48 PM

Die Vorteile der H5 -Seitenproduktion umfassen: Leichte Erfahrung, schnelle Ladegeschwindigkeit und Verbesserung der Benutzerbindung. Die plattformübergreifende Kompatibilität ist nicht erforderlich, um sich an verschiedene Plattformen anzupassen und die Entwicklungseffizienz zu verbessern. Flexibilität und dynamische Updates, kein Audit erforderlich, was die Änderung und Aktualisierung von Inhalten erleichtert. Kosteneffektive, niedrigere Entwicklungskosten als native Apps.

Warum müssen Sie Vue.use (Vuerouter) in der Datei idex.js unter dem Router -Ordner anrufen? Warum müssen Sie Vue.use (Vuerouter) in der Datei idex.js unter dem Router -Ordner anrufen? Apr 05, 2025 pm 01:03 PM

Die Notwendigkeit der Registrierung von Vuerouter in der Datei index.js -Datei im Ordner Router Bei der Entwicklung von VUE -Anwendungen stoßen Sie häufig Probleme mit der Routing -Konfiguration. Besonders...

Wie implementieren Sie ein benutzerdefiniertes Thema, indem Sie die SCSS -Variable des Elements überschreiben? Wie implementieren Sie ein benutzerdefiniertes Thema, indem Sie die SCSS -Variable des Elements überschreiben? Apr 05, 2025 pm 01:45 PM

Wie implementieren Sie ein benutzerdefiniertes Thema, indem Sie die SCSS -Variable des Elements überschreiben? Verwenden von Element ...

Warum wird ein bestimmtes Div -Element im Edge -Browser nicht angezeigt? Wie löst ich dieses Problem? Warum wird ein bestimmtes Div -Element im Edge -Browser nicht angezeigt? Wie löst ich dieses Problem? Apr 05, 2025 pm 08:21 PM

Wie löst ich das durch User Agent Style Sheets verursachte Anzeigeproblem? Bei Verwendung des Edge -Browsers kann ein Div -Element im Projekt nicht angezeigt werden. Nachdem ich nachgesehen hatte, habe ich gepostet ...

Warum werden negative Margen in einigen Fällen nicht wirksam? Warum werden negative Margen in einigen Fällen nicht wirksam? Apr 05, 2025 pm 04:09 PM

Warum werden negative Margen in einigen Fällen nicht wirksam? Wenn Sie CSS zum Layout -Webseiten verwenden, begegnen Sie häufig negative Margen (negativ ...

See all articles