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

Einführung in die grundlegenden TypeScript-Typen

Inhaltsverzeichnis 1. Grundtypen 2. Objekttyp 2.1...

Flex-Layout ermöglicht adaptive Seiten (Syntax und Beispiele)

Einführung in Flex Layout Flex bedeutet auf Engli...

Detaillierte Erklärung der Linux-RPM- und Yum-Befehle und -Verwendung

RPM-Paketverwaltung Ein Verpackungs- und Installa...

VUE+Canvas realisiert den gesamten Prozess eines einfachen Gobang-Spiels

Vorwort In Bezug auf das Layout ist Gobang viel e...

Detaillierte Erklärung von count(), group by, order by in MySQL

Ich bin vor Kurzem auf ein Problem gestoßen, als ...

Stabile Version von MySQL 8.0.18 veröffentlicht! Hash Join ist wie erwartet da

Die stabile Version (GA) von MySQL 8.0.18 wurde g...

Beispielcode für ein großes Dropdown-Menü, implementiert in reinem CSS

Dies ist ein großes Dropdown-Menü, das rein in CS...

Docker-Installation Tomcat Dubbo-Admin-Instanz-Kenntnisse

1. Laden Sie das Tomcat-Image herunter Docker zie...

Tomcat analysiert XML und erstellt Objekte durch Reflektion

Der folgende Beispielcode stellt die Prinzipien d...

Mehrere Grundsätze für die Produktdesign-Referenz auf Websites

In der folgenden Analyse geht es um Produktdesign...

Was sind Web Slices?

Neue Funktion von IE8: Web Slices (Web Slices) Mi...

Detaillierte Erklärung zur Verwendung von Router-View-Komponenten in Vue

Wenn Sie ein Vue-Projekt entwickeln, müssen Sie h...