2009-07-08 14 views
15

Recientemente, hemos creado una aplicación web con Prototype, que hace un buen uso de su funcionalidad Class.Create(). En este momento, estamos considerando migrar a jQuery ya que parece ser considerada una "mejor" biblioteca. He estado leyendo el tema y descubrí que jQuery no tiene un soporte directo para la creación de clases como lo hace Prototype. Por supuesto, todavía hay el .prototype y el jQuery.extend (como se menciona en https://stackoverflow.com/questions/79477/how-to-create-an-object-oriented-class-in-jquery), pero después de buscar un poco más, tengo la sensación de que jQuery en realidad no quiere 'escribir' de esta manera ...¿Por qué jQuery parece desalentar el uso de OOP regular?

La misma página tiene una publicación que menciona el complemento Classy de John Resig, que me pareció genial. Sin embargo, la página dice que en realidad fue una broma del Día de los Inocentes, y que Resig realmente aconseja no usar el código. Me complace obligar, pero me gustaría entender cuál es la razón de todo esto y, por supuesto, qué es lo que QUIEREN que hagas en su lugar. ¿Alguien me puede iluminar?

operación -Editar-

Gracias por las respuestas interesantes. En aras de la claridad: ¿esto significa que está bien reescribir las clases que hice en Prototype para la forma jQuery de "dar forma" a una clase, y aún así usarlas de la misma "manera" que antes? ¿O esto todavía se considera una mala práctica, y debería usar un enfoque diferente?

+4

Para su información JavaScript no es un lenguaje basado en la clase. Es un lenguaje basado en prototipos. – rahul

+0

... y como tal, más similar a Lisp que a C: http://javascript.crockford.com/javascript.html – Boldewyn

+0

(De alguien que tiene cuatro años de ventaja para ver la diferencia) Incluso si este [artículo] (http://jqueryvsmootools.com/) es sobre Mootools vs JQuery, el razonamiento detrás de Mootools esencialmente se aplica a PrototypeJS. La sección [lema] (http://jqueryvsmootools.com/#mottos) lo dice todo. TL; DR; JQuery está diseñado para la manipulación DOM, mientras que Mootool (y Prototype) está diseñado con DOM ** y ** utilidades adicionales como clase base OOP en lenguaje base prototipo, etc. – OnesimusUnbound

Respuesta

11

Primera chungo búsqueda en Google de "orientado a objetos javascript" se volvió esto ... pero explica el punto que quería transmitir:

JavaScript Object-Oriented Programming

Basta con echar un vistazo al primer párrafo y se find:

JavaScript no es un lenguaje de programación completamente orientado a objetos. El uso de clases en JS se basa en la funcionalidad del prototipo. La biblioteca Prototype enmascara el uso de la funcionalidad del prototipo para crear su clase. jQuery espera que uses la funcionalidad del prototipo de la misma forma que lo harías con JS común para extender jQuery y crear tus propios objetos personalizados.

+7

jQuery mejora JavaScript y no intenta simular otro lenguaje. +1 – Boldewyn

+4

El párrafo citado es simplemente incorrecto. Javascript es un lenguaje de programación completamente orientado a objetos. Lo que no es es un lenguaje OO basado en clases. Los diseñadores de Prototype decidieron proporcionar algo de Class-fu para hacer que mucha gente se sienta más cómoda (incluyéndome a mí, cuando comencé con ella). Después de leer "Javascript: The Good Parts" de Crockford, ahora creo que fue un error. –

+0

@Colin: correcto. y, sí, error total. No me gusta Dojo por las mismas razones. –

1

Tuve exactamente el mismo problema con la conversión de Prototype a jQuery, y todavía puedo pensar que solo digo que sí, parece que no tienen mucho sentido en Prototype. Aún así, al codificar jQuery, se encontrará confiando mucho en JSON, que supongo que es lo más parecido a lo pseudooficial que se obtendrá.

algunas de las cosas de jQuery ui realmente iteran sobre todas las propiedades de un parámetro que pasa, y hace cosas con eso, lo que significa que no puede hacer, digamos, Object.prototype en absoluto, porque eso agregará cosas a cada objeto, que jQuery ui tratará de tratar como un parámetro relevante.

velocidad y escalabilidad es sorprendente, sin embargo, así que yo diría que es una cuestión de tiempo antes de que llegue a Prototype y COMETO acuerdo con el hecho de que la respuesta de Justin en realidad hace un punto válido :)

0

jQuery no tiene directa soporte integrado para la clase de creación de como prototipo hace

ya que no debe. La creación de clase se deja mejor al programador, no a la biblioteca. Empecé con la biblioteca Prototype y me alejé, porque estaba tan hinchado. OOP en JavaScript no es difícil en absoluto. Siempre que sepa cómo usar prototipos, estará bien.

Hacer el equivalente de miembros privados en JavaScript se vuelve complicado cuando se trata de Prototype's Class.create. Y, sinceramente, no creo que Class.create te brinde nada útil, que no puedas hacer fácilmente tú mismo o con jQuery.

Siempre puede usar ambas bibliotecas al mismo tiempo para ayudar con la transición. jQuery tiene esta bonita función noConflict que devuelve la función $ a su propietario original.

Cuestiones relacionadas