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“
Inhaltsverzeichnis 1. Grundtypen 2. Objekttyp 2.1...
Einführung in Flex Layout Flex bedeutet auf Engli...
RPM-Paketverwaltung Ein Verpackungs- und Installa...
Vorwort In Bezug auf das Layout ist Gobang viel e...
Ich bin vor Kurzem auf ein Problem gestoßen, als ...
1. SSH-Remoteverwaltung SSH-Definition SSH (Secur...
Vorwort Wie Sie alle wissen, sind wir bei MySQL-B...
Die stabile Version (GA) von MySQL 8.0.18 wurde g...
Dies ist ein großes Dropdown-Menü, das rein in CS...
1. Laden Sie das Tomcat-Image herunter Docker zie...
Der folgende Beispielcode stellt die Prinzipien d...
In der folgenden Analyse geht es um Produktdesign...
Neue Funktion von IE8: Web Slices (Web Slices) Mi...
Wenn Sie ein Vue-Projekt entwickeln, müssen Sie h...
Inhaltsverzeichnis Vorwort Szenarioanalyse Zusamm...