Zusammenfassung und Praxis des Javascript-Prototyp-Kettendiagramms

Zusammenfassung und Praxis des Javascript-Prototyp-Kettendiagramms

Prototypenkette

Das Schlüsselwort „class“ wurde in ES6 eingeführt, aber JS basiert immer noch auf Prototypen und „class“ ist eigentlich syntaktischer Zucker.

Beispielsweise gibt es eine Personenklasse:

Klasse Leute {
  Konstruktor(Requisiten) {
    dieser.name = Requisiten.name;
  }
  laufen() {
    console.log('ausführen')
  }
}

Durch die neue Personenklasse werden viele Personen generiert, wie beispielsweise Zhang San und Li Si:

let lisi = neue Personen('Personen')

Doch inmitten dieser riesigen Menschenmenge gibt es eine Gruppe von Menschen mit außergewöhnlichen Talenten. Sie werden Superhelden genannt.

Klasse Hero erweitert Leute {
   Konstruktor(Requisiten) {
    super(Requisiten);
    diese.Leistung = Eigenschaften.Leistung
   }
   heyHa() {
       Alarm (diese.Leistung)
   }
}

Die Klasse Hero erbt People, daher ist der Hero zunächst ein Individuum mit einer Run-Methode und verfügt dann über eine Superkraft-HeyHa-Methode, die normale Menschen nicht haben. Wir können einen Helden namens Jinx definieren, der die Superkraft einer Kanone besitzt:

let Jinx = neuer Held({ Name: 'jinx', Macht: 'Kanone!' })

Obwohl die Instanz Jinx keine Run-Methode definiert, kann mithilfe der Prototypenkette ermittelt werden, dass der People-Prototyp diese Run-Methode hat, d. h. sein impliziter Prototyp __proto__ verweist auf den Prototyp des Konstruktors.

Bildbeschreibung hier einfügen

Wenn eine Instanz auf eine Methode oder Eigenschaft zugreift, beginnt sie bei sich selbst und sucht dann zurück in der Prototypenkette.

Jinx.heyHa() // Kanone!
// Wenn es diese Methode hat Jinx.run = () => console.log('i just fly!')
Jinx.run() // ich fliege einfach!

Also, worauf verweist People.prototype.__proto__ ? Object.prototype , geben Sie den Code in die Konsole ein und Sie sehen:

Bildbeschreibung hier einfügen

Aber __prototype__ von Object.prototype ist gleich null und das Ende des Universums ist das Nichts. .

Bildbeschreibung hier einfügen

Bisher sieht das vollständige Kettendiagramm des Prototyps wie folgt aus:

Bildbeschreibung hier einfügen

Wir können eine einfache JQuery-Bibliothek basierend auf der Prototypenkette implementieren

Klasse JQuery {
  Konstruktor(Selektor, Knotenliste) {
    const res = nodeList || document.querySelectorAll(Selektor);
    Konstante Länge = Res.Länge;
    für (sei i = 0; i < Länge; i++) {
      dies[i] = res[i]
    }
    diese.Länge = Länge;
    dieser.Selektor = Selektor;
  }
  Gleichung (Index) {
    gibt neues JQuery zurück (undefiniert, [dieser[Index]]);
  }
  jedes(fn) {
    für(lass i = 0; i < diese.Länge; i++) {
      const ele = dies[i]
      fn(Element)
    }
    gib dies zurück;
  }
  ein(Typ, fn) {
    gib dies zurück.jedes(ele => {
      ele.addEventListener(Typ, Funktion, falsch)
    })
  }
  // Andere DOM-APIs erweitern
}
const $$ = (Selektor) => neues JQuery(Selektor);
$$('body').eq(0).on('click', () => alert('click'));

Führen Sie es in der Konsole aus und das Ergebnis ist wie folgt:

Bildbeschreibung hier einfügen

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können!

Das könnte Sie auch interessieren:
  • Kennen Sie Javascript-Prototypen und Prototypenketten?
  • Wie gut kennen Sie sich mit dem Konstruktor, Prototyp, der Prototypenkette und Neuem von JavaScript aus?
  • Tiefgreifendes Verständnis von Javascript-Prototypen und Prototypenketten
  • Ein Artikel, der Ihnen hilft, die Vererbung und Prototypenkette von JS zu verstehen
  • Zwei Bilder von JavaScript zum Verständnis der Prototypenkette
  • Detaillierte Erläuterung des JavaScript-Prototyps und der Prototypenkette

<<:  Implementierungscode für unendliches Scrollen mit n Containerelementen

>>:  Detaillierte Erklärung zur Lösung des Problems „Position: Fester fester Positionierungsversatz“

Artikel empfehlen

So implementieren Sie den Selbststart eines Docker-Containers

Container-Autostart Docker bietet einen Neustartr...

setup+ref+reactive implementiert Vue3-Reaktionsfähigkeit

Das Setup wird zum Schreiben kombinierter APIs ve...

Detaillierte Erklärung, wie Tomcat asynchrone Servlets implementiert

Vorwort Durch meine vorherige Tomcat-Artikelserie...

Der Unterschied und die Einführung von ARGB, RGB und RGBA

ARGB ist ein Farbmodus, also der RGB-Farbmodus mi...

Beispiel für das Hinzufügen von Attributen mithilfe von Stilen in HTML

Fügen Sie den erforderlichen Links Inline-Stile hi...

Jmeter stellt eine Verbindung zum Datenbankprozessdiagramm her

1. Laden Sie den MySQL-JDBC-Treiber (mysql-connec...

So erstellen Sie LVM für das XFS-Dateisystem in Ubuntu

Vorwort Die logische Datenträgerverwaltung von lv...

Detaillierte Analyse des Linux-NFS-Mechanismus anhand von Fällen

In Fortsetzung des vorherigen Artikels erstellen ...

Grafisches Tutorial zur Installation von Linux CentOS6.9 unter VMware

Als technischer Neuling zeichne ich den Vorgang d...

Implementierung einer nicht geheimen SSH-Kommunikation in Linux

Was ist SSH? Administratoren können sich remote a...

Erfahren Sie mehr über die am häufigsten verwendeten JavaScript-Ereignisse

Inhaltsverzeichnis JavaScript-Ereignisse: Häufig ...

Webpack erstellt ein Gerüst zum Verpacken von TypeScript-Code

Erstellen eines Ordners Verzeichnisstruktur: daba...