JavaScript plugin Erstellung
So erstellen Sie eine Reine JavaScript (ohne Bibliothek) plugin, welches wie folgt aussieht:
document.getElementById('id').myPlugin();
Wie jQuery?
- es ist erwähnenswert, dass die syntax die du vorgeschlagen hast ist gar nicht so jquery und das aus sehr guten Gründen, von denen einige fredrik erarbeitet hat, auf
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erstellen Sie Ihre eigenen wrapper (ähnlich wie jQuery), und dadurch können Sie umgehen all die hier diskutierten Probleme mit der Ausweitung der DOM direkt.
Und Sie können fügen Sie Ihre eigenen Methoden, etwa so:
Verwendung:
Ich zögere zu sagen, Sie können nicht. Nachdem alle, Prototype.js Tat.
Nennen zu können
getElementById('id').someNewMethod()
müssten Sie 'verlängern' der Prototyp des Typs des ObjektsgetElementById
gibt, die eineElement
. In einigen Browsern können Sie in der Tat tun:Dies ist jedoch Recht fragwürdig. Prototyping auf die native JavaScript-Objekte wie
Object
oderString
ist potenziell zwielichtigen genug, was mit dem Namen zu Auseinandersetzungen zwischen Browser und Bibliotheken, aberElement
und alle anderen DOM-Objekte können 'host' - Objekte, die nicht zulassen prototyping.Selbst wenn DOM-Objekte implementiert sind, sind mit einem vollen nativen JavaScript-Schnittstelle, keine Angabe, sagt, dass
Element
Belichten muss ein Prototyp/Konstruktor-Funktion unter einemwindow
Eigenschaft/Globale variable namensElement
.In der Realität funktioniert in Firefox, Webkit und Opera, und IE ab version 8. Aber es ist unstandardised nicht alle Browser die gleichen Schnittstellen zur Verfügung, die unter allen den gleichen Namen, und es funktioniert nicht im IE6, IE7 oder vielen kleineren Browsern (zB. mobiler Browser).
Prototyp hatte ein fallback für diese Browser: es würde versuchen zu ergänzen, die jede Instanz eines
Element
mit den neuen Mitgliedern, wenn es zum ersten mal sah jedes element. Aber dieser hatte sehr chaotisch Nebenwirkungen und wird durch viele betrachtet, ein Fehler; Prototyp 2.0 nicht versuchen zu erweitern DOM-Schnittstellen mehr.Vielleicht in der Zukunft wird jemand Band ab und machen ihn zu einem zuverlässigen Bestandteil der browser-Umgebung. Aber heute ist das nicht der Fall, so sollten Sie weiterhin verwenden, andere, clunkier Methoden, wie die wrapper-Funktionen.
document.body.firstChild
macht keine Methode ruft bei allen. Sie konnte nicht definieren Sie Ihre eigene Eigenschaft get/Set-Methoden in JavaScript vor ECMAScript Fifth Edition, so können Sie nicht haben dynamische Eigenschaften, die arbeiten, cross-browser und sogar mit "Eigenschaften" können Sie nicht nachahmen, NodeList-array-like sehr gut.firstChild
s undnextSibling
s undparentNode
s und jede andere Eigenschaft für den gesamten DOM zu start-up-Zeit und auf jedem Dokument änderung (eek!), oder ändern Sie die Schnittstelle, wie zB. indem die Benutzer zu schreibendocument.getBody().getFirstChild()
. Aber wenn Sie die änderung der Schnittstelle, die Sie verlieren den Vorteil der nativen DOM sowieso, so dass Sie könnte genauso gut kommen mit Ihrer eigenen Oberfläche (wie jQuery et al.).Ich Stimme mit spender. Sollten Sie wirklich nicht wollen, um Chaos mit standard-JavaScript-Elementen. Es ist besser zu tun, ein wrapper für ihn (das ist,
$
wie jQuery verwendet). Wenn Sie möchten, eine Kurzform für " erste Elemente einer wrapper-Methode und erweitern, dass man statt. Dies macht den code leichter zu pflegen. Da, wenn Sie ändern die standard-Funktionalität in JavaScript kann es zu Störungen mit dem standard-Verhalten. Dies könnte dazu führen, dass einige wirklich schwer zu Debuggen. Es ist besser, um eine wrapper-Funktion, tun, was Sie möchten.Aber trotz dieser, wenn Sie wollen, mess around mit dem standard-Verhalten können Sie binden immer neue Methoden, um die standard-Objekte mithilfe von prototyping. Zum Beispiel:
Warum dieses format? Ich denke,
wäre wahrscheinlich übersichtlicher für jedermann, den code zu verwalten. Ich bin kein großer fan von monkey-patching.