En JavaScript no existen clases, se simulan las clases con objetos funcion que hacen las veces de constructor. Pero a pesar de ello a los desarrolladores backend les sigue gustando usar clases. En general a todo el mundo que venga de otro lenguaje OO le gusta seguir utilizando clases, o algo que las simule, para instanciar los objetos que van a utilizar.
En la documentacion de Prototype JS clasifican los métodos de una «clase» en dos categorías: métodos de instancia () y métodos de clase (). Por ejemplo la clase Element que se usa para trabajar con el DOM.
El caso de jQuery es bastante distinto. JQuery es un único objeto (lo que seria una clase para Prototype) con distintas propiedades. Cuando usamos el selector $, este nos devuelve un objeto instancia de jQuery, que referencia al elemento del DOM que le hallamos indicado. Este objeto instanciado, tiene propiedades comunes al objeto jQuery pero otras muy variadas. Esto es así porque en el objeto instanciado puede contener un array de elementos del DOM, todo el documento (con $(document)… ) o un div creado al vuelo y que no cuelga de ninguna rama del DOM aun; en general cualquier cosa, por eso tiene propiedades varias para trabajar con cualquier elemento posible.
La documentación de jQuery muestra los metodos de dos formas dependiendo de si son de instancia o de clase. Los métodos de clase aparecen con las nomenclatura «jQuery.metodo()» y los de instancia aparecen empezando por un punto: «.metodo()» que son los que normalmente para trabajar de forma ágil se usan del modo: «$(«#id»).metodo()«.
Documentación jQuery Prototype Style
Me preguntaba como sería ver la documentación de jQuery al estilo de la docu de PrototypeJS. En definitiva aparecería una sola clase (jQuery en si) seria algo parecido a lo que sigue:
Propiedades de jQuery: Class Method
prototype | fn | extend | noConflict | isReady | ready | bindReady | isFunction |
isArray | isPlainObject | isEmptyObject | error | parseJSON | noop | globalEval | nodeName |
each | trim | makeArray | inArray | merge | grep | map | guid |
proxy | uaMatch | browser | support | props | cache | expando | noData |
data | removeData | queue | dequeue | attrFn | attr | event | Event |
find | expr | unique | text | isXMLDoc | contains | filter | dir |
nth | sibling | fragments | clean | cleanData | style | css | curCSS |
swap | get | getScript | getJSON | post | ajaxSetup | ajaxSettings | lastModified |
etag | ajax | handleError | active | httpSuccess | httpNotModified | httpData | param |
speed | easing | timers | fx | offset |
Propiedades del prototipo de jQuery (objeto jQuery): Instance Methods
init | selector | jquery | length | size | toArray | get | pushStack |
each | ready | eq | first | last | slice | map | end |
push | sort | splice | extend | data | removeData | queue | dequeue |
delay | clearQueue | attr | removeAttr | addClass | removeClass | toggleClass | hasClass |
val | bind | one | unbind | delegate | undelegate | trigger | triggerHandler |
toggle | hover | live | die | blur | focus | focusin | focusout |
load | resize | scroll | unload | click | dblclick | mousedown | mouseup |
mousemove | mouseover | mouseout | mouseenter | mouseleave | change | select | submit |
keydown | keypress | keyup | error | find | has | not | filter |
is | closest | index | add | andSelf | parent | parents | parentsUntil |
next | prev | nextAll | prevAll | nextUntil | prevUntil | siblings | children |
contents | text | wrapAll | wrapInner | wrap | unwrap | append | prepend |
before | after | remove | empty | clone | html | replaceWith | detach |
domManip | appendTo | prependTo | insertBefore | insertAfter | replaceAll | css | serialize |
serializeArray | ajaxStart | ajaxStop | ajaxComplete | ajaxError | ajaxSuccess | ajaxSend | show |
hide | _toggle | fadeTo | animate | stop | slideDown | slideUp | slideToggle |
fadeIn | fadeOut | offset | position | offsetParent | scrollLeft | scrollTop | innerHeight |
outerHeight | height | innerWidth | outerWidth | width |
Propiedades Comunes de jQuery y de su prototipo.
En general los métodos de instancia y de clase comunes son los siguientes:
extend | ready | error | each | map | data | removeData | queue |
dequeue | attr | find | text | filter | css | get | offset |
En este articulo no me voy a meter con la diferencia entre una librería y otra, eso ya quedaría para otro momento. Pero en cuanto a documentaciones se refiere me gusta bastante el estilo claro de la de Prototype. Aunque ya hace tiempo que me acostumbré a buscar en la documentación de jQuery, veo que no pueden hacer toda la documentación en una sola página. Su documentación sigue la misma filosofía que la librería pero puede ser confuso para quienes empiezan a trabajar con ella, y todo viene de que hay que cambiar la forma de pensar cuando se cambia de lenguaje. JavaScript is diferent. XD