Heim >Web-Frontend >js-Tutorial >Verständnis der Prototypenvererbung und ESlasses in JavaScript
JavaScript hat einen anderen Vererbungsmechanismus als die meisten herkömmlichen OOP-Sprachen. Der Schwerpunkt liegt auf Prototypen, wohingegen ES6-Klassen eine zeitgemäßere Methode bieten. Lassen Sie uns untersuchen, wie ES6-Klassen die Lesbarkeit und Nützlichkeit verbessern und wie die Prototypenvererbung funktioniert.
Jedes Objekt in JavaScript verfügt über einen internen Link zu einem anderen Objekt, das als Prototyp bezeichnet wird. Dieses Prototypobjekt kann einen eigenen Prototyp haben und eine Kette bilden.
Beispiel:
const animal = { eats: true }; const rabbit = Object.create(animal); rabbit.hops = true; console.log(rabbit.eats); // true (inherited) console.log(rabbit.hops); // true (own property)
Erklärung:
Hier erbt das Kaninchen die Nahrung vom Tier. Dies zeigt, wie Objekte Eigenschaften durch Vererbung teilen können.
Vor ES6-Klassen verwendete JavaScript Konstruktorfunktionen, um Objekte zu erstellen und ihre Eigenschaften zu initialisieren.
Beispiel:
function Animal(name) { this.name = name; } Animal.prototype.eats = true; const dog = new Animal('Dog'); console.log(dog.name); // Dog console.log(dog.eats); // true
Erklärung:
Der Animal-Konstruktor initialisiert den Namen. Die eats-Eigenschaft wird über den Animal.prototype hinzugefügt und ermöglicht so die Vererbung.
Ein Masterobjekt dient als Prototyp für andere Objekte.
Beispiel:
const masterObject = { type: 'Generic' }; const specificObject = Object.create(masterObject); specificObject.name = 'Specific'; console.log(specificObject.type); // Generic (inherited) console.log(specificObject.name); // Specific (own property)
Erklärung:
MasterObject ist der gemeinsame Vorfahre und SpecificObject erbt seine Type-Eigenschaft und fügt gleichzeitig Name hinzu.
JavaScript durchsucht die Prototypkette, um Eigenschaften und Methoden zu finden.
Beispiel:
const grandparent = { role: 'grandparent' }; const parent = Object.create(grandparent); parent.role = 'parent'; const child = Object.create(parent); console.log(child.role); // parent
Erklärung:
Das untergeordnete Objekt sucht nach einer Rolle. Es findet die übergeordnete Rolle und demonstriert, wie die Prototypenkette Eigenschaftssuchen auflöst.
Objekte können Methoden durch Prototypenvererbung teilen.
Beispiel:
function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(this.name + ' makes a noise.'); }; function Dog(name) { Animal.call(this, name); } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; Dog.prototype.bark = function() { console.log(this.name + ' barks.'); }; const dog = new Dog('Rex'); dog.speak(); // Rex makes a noise. dog.bark(); // Rex barks.
Erklärung:
Dog erbt von Animal und ermöglicht ihm den Zugriff auf Sprechen. Es definiert auch seine eigene Rindenmethode.
ES6 führte eine sauberere, intuitivere Möglichkeit zum Erstellen von Klassen ein.
Beispiel:
class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise.'); } }
Erklärung:
Diese klassenbasierte Syntax vereinfacht die Erstellung und Vererbung von Objekten und macht den Code besser lesbar.
ES6 ermöglicht die Definition von Methoden, um dynamisch auf Objekteigenschaften zuzugreifen oder diese zu ändern.
Beispiel:
const animal = { eats: true }; const rabbit = Object.create(animal); rabbit.hops = true; console.log(rabbit.eats); // true (inherited) console.log(rabbit.hops); // true (own property)
Erklärung:
Bereich ist eine berechnete Eigenschaft mit einem Getter und Setter, die dynamische Aktualisierungen ermöglicht.
Statische Methoden gehören zur Klasse selbst und nicht zu Instanzen.
Beispiel:
function Animal(name) { this.name = name; } Animal.prototype.eats = true; const dog = new Animal('Dog'); console.log(dog.name); // Dog console.log(dog.eats); // true
Erklärung:
add ist eine statische Methode, auf die direkt in MathHelper zugegriffen werden kann und die für Hilfsfunktionen nützlich ist.
Polymorphismus ermöglicht es Unterklassen, Methoden aus der übergeordneten Klasse neu zu definieren.
Beispiel:
const masterObject = { type: 'Generic' }; const specificObject = Object.create(masterObject); specificObject.name = 'Specific'; console.log(specificObject.type); // Generic (inherited) console.log(specificObject.name); // Specific (own property)
Erklärung:
Dog-Overrides sprechen von Animal und stellen eine eigene Implementierung bereit.
Die Grundlage der objektorientierten JavaScript-Programmierung bilden ES6-Klassen und die Prototypenvererbung. Das Schreiben von wiederverwendbarem, wartbarem Code wird verbessert, wenn man weiß, wie man Konstruktorfunktionen, Prototypen und ES6-Klassen verwendet. Machen Sie sich diese Ideen zu eigen, um das Vererbungsparadigma von JavaScript vollständig zu nutzen!
Folgen Sie mir auf: Github Linkedin
Das obige ist der detaillierte Inhalt vonVerständnis der Prototypenvererbung und ESlasses in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!