Hallo,
Ich glaube das prototype Framwork arbeitet sogar, dass die $ Funktion kein DOM-Element zurück gibt, sondern das prototypejs eigene Element Objekt.
Nicht ganz. Prototype erweitert das DOM-Element um eigene Methoden. jQuery wrappt es in ein Array-artiges Objekt mit eigenen Methoden.
Gibt es dann nicht auch Performance Probleme, wenn man sich jedes DOM-Element, was man sich per $ holen will, erst noch gewrappt wird?
Ja, natürlich ist das vergleichsweise lahm. Dafür kann man auf diese Weise die Programmierung signifikant vereinfachen.
Was ist die "Best Practice"?
Wie du sagst gibts da je nach Framework unterschiedliche. Das ist eher Geschmackssache, ob man $-Wrapping bevorzugt oder riesige Namespace-Hierarchien wie YUI. Beide sind aktuell und verbreitet. John Resig von jQuery hat aus Spaß mal jQuery mit Klassenhierarchie geschrieben: http://ejohn.org/blog/classy-query/.
Letzteres sieht zunächst aus wie das Decorator Design Pattern, aber ist es m.E. nicht, da Element nicht von HTMLElement abgeleitet ist.
Idealerweise würde man HTMLElement.prototype erweitern, was in einigen Browsern auch funktioniert, aber eben nicht browserübergreifend. Deshalb greifen Frameworks zu Wrappern.
Ich würde das gerne wissen, da ich mir etwas ähnliches bauen will, allerdings eben sehr abgespeckt, da ich nur wenige Methoden brauche.
http://www.dustindiaz.com/roll-out-your-own-interface/
http://aktuell.de.selfhtml.org/weblog/javascript-bibliotheken
Aber wenn es nur um einige Helferfunktionen geht, würde ich sie einfach in einem eigenen kleinen Namensraum unterbringen. helper.addClass und so weiter.
Mathias