Heim >Web-Frontend >js-Tutorial >Verständnis der Prototypenvererbung und ESlasses in JavaScript

Verständnis der Prototypenvererbung und ESlasses in JavaScript

Barbara Streisand
Barbara StreisandOriginal
2024-12-07 05:48:15825Durchsuche

Understanding Prototype Inheritance and 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.


1. Prototyp: Die Grundlage der Vererbung

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.


2. Konstruktorfunktionen: Objekte erstellen

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.


3. Hauptobjekt: Der gemeinsame Vorfahre

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.


4. Prototypenkette: Der Hierarchie folgen

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.


5. Prototyp-Vererbung: Methoden teilen

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.


6. ES6-Klassen: Eine sauberere Syntax

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.


7. Getter und Setter: Eigenschaften verwalten

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.


8. Statische Methoden: Nutzen auf Klassenebene

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.


9. Polymorphismus: Überschreibende Methoden

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.


Abschluss

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!

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