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“
1. Verwenden Sie Daten aus Tabelle A, um den Inha...
Dieser Blog ist eine Arbeitsnotiz Umfeld: Nginx-V...
<br />Dies ist nicht nur ein Zeitalter der I...
Bei Webdiensten geht es um die Kommunikation zwis...
Die Hauptunterschiede sind folgende: 1. MySQL ver...
Wir haben vorgestellt, wie man mit den CSS3-Spalt...
„Großartig“ sind wahrscheinlich die beiden Worte, ...
1. Laden Sie die erforderlichen Pakete herunter w...
1. Befehlseinführung Der Befehl ipcs wird verwend...
Ich erinnere mich, dass es vor ein paar Jahren in...
Automatisierter Build bedeutet, Docker Hub zu ver...
Ich lerne derzeit etwas über Redis und Container ...
Inhaltsverzeichnis 1. Bereiten Sie das Springboot...
Es gibt viele Schleifenanweisungen in JavaScript,...
In diesem Artikelbeispiel wird der spezifische Co...