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. 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 Aber Bisher sieht das vollständige Kettendiagramm des Prototyps wie folgt aus: Wir können eine einfache JQuery-Bibliothek basierend auf der Prototypenkette implementierenKlasse 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: ZusammenfassenDieser 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:
|
<<: Implementierungscode für unendliches Scrollen mit n Containerelementen
>>: Detaillierte Erklärung zur Lösung des Problems „Position: Fester fester Positionierungsversatz“
Container-Autostart Docker bietet einen Neustartr...
Das Setup wird zum Schreiben kombinierter APIs ve...
Vorwort Durch meine vorherige Tomcat-Artikelserie...
ARGB ist ein Farbmodus, also der RGB-Farbmodus mi...
Wenn Sie zur Implementierung eines Kontrollkästch...
Fügen Sie den erforderlichen Links Inline-Stile hi...
Tag-Typ (Anzeigemodus) HTML-Tags werden im Allgem...
1. Laden Sie den MySQL-JDBC-Treiber (mysql-connec...
Vorwort Die logische Datenträgerverwaltung von lv...
In Fortsetzung des vorherigen Artikels erstellen ...
Als technischer Neuling zeichne ich den Vorgang d...
Was ist SSH? Administratoren können sich remote a...
Inhaltsverzeichnis JavaScript-Ereignisse: Häufig ...
Erstellen eines Ordners Verzeichnisstruktur: daba...
Ansible ist ein neues, auf Python basierendes, au...