2009-07-08 8 views
15

Abbiamo recentemente creato un'app Web utilizzando Prototype, facendo un buon uso della sua funzionalità Class.Create(). In questo momento, stiamo considerando la migrazione a jQuery in quanto sembra essere considerata una libreria "migliore". Ho fatto qualche lettura sull'argomento e ho scoperto che jQuery non ha un supporto integrato diretto per la creazione di classi come fa Prototype. Naturalmente, c'è ancora il .prototype e il jQuery.extend (come menzionato in https://stackoverflow.com/questions/79477/how-to-create-an-object-oriented-class-in-jquery), ma dopo qualche ricerca in più, ho avuto la sensazione che jQuery non ti "voglia" di scrivere in questo modo ...Perché jQuery sembra scoraggiare l'uso del normale OOP?

Nella stessa pagina è presente un post che menziona il plugin Classy di John Resig, che mi è sembrato ottimo. Tuttavia, la pagina afferma che si trattava in realtà di una battuta del pesce d'aprile e che Resig in realtà consiglia di non utilizzare il codice. Sono felice di accontentarti, ma mi piacerebbe capire qual è la ragione di tutto ciò, e, naturalmente, che cosa vogliono che tu faccia invece. Qualcuno può illuminarmi?

operativa -Editazione-

Grazie per le risposte interessanti. Per maggiore chiarezza: significa che è corretto riscrivere le classi che ho creato in Prototype nel modo jQuery di 'modellare' una classe, e comunque usarle nella stessa 'maniera' di prima? O è ancora considerato una cattiva pratica e dovrei usare un approccio diverso?

+4

Per vostra informazione JavaScript non è un linguaggio di classe. È un linguaggio basato su prototipi. – rahul

+0

... e come tale più simile a Lisp che a C: http://javascript.crockford.com/javascript.html – Boldewyn

+0

(Da qualcuno che ha quattro anni di vantaggio per vedere la differenza) Anche se questo [articolo] (http://jqueryvsmootools.com/) riguarda Mootools vs JQuery, il ragionamento alla base di Mootools si applica essenzialmente a PrototypeJS. La sezione [motto] (http://jqueryvsmootools.com/#mottos) dice tutto. TL; DR; JQuery è progettato per la manipolazione del DOM, mentre Mootool (e Prototype) è progettato con DOM ** e ** utilità aggiuntive come OOP di base su un linguaggio di base prototipo, ecc. – OnesimusUnbound

risposta

11

prima ricerca scadente Google per "object oriented javascript" trasformato questo in su ... ma spiega il punto che volevo far passare:

JavaScript Object-Oriented Programming

Basta dare uno sguardo al primo comma e si trova:

Javascript non è un linguaggio di programmazione completamente orientato agli oggetti. L'uso delle classi in JS si basa sulla funzionalità del prototipo. La libreria Prototype maschera l'utilizzo della funzionalità del prototipo per creare la tua classe. jQuery si aspetta che tu usi la funzionalità del prototipo nello stesso modo in cui utilizzeresti il ​​JS regolare per estendere jQuery stesso e creare i tuoi oggetti personalizzati.

+7

jQuery migliora JavaScript e non tenta di simulare un'altra lingua. +1 – Boldewyn

+4

Il paragrafo citato è semplicemente sbagliato. Javascript è un linguaggio di programmazione completamente orientato agli oggetti. Ciò che non è è un linguaggio OO basato sulla classe. I progettisti di Prototype hanno deciso di fornire un po 'di Class-fu per rendere molte persone più a loro agio (incluso me, quando ho iniziato con esso). Dopo aver letto "Javascript: The Good Parts" di Crockford, ora penso che sia stato un errore. –

+0

@Colin: corretto. e, sì, errore totale. Non mi piace Dojo per le stesse ragioni. –

1

Ho avuto esattamente lo stesso problema con la conversione da Prototype a jQuery, e posso ancora solo pensare di dire che sì, sembra che non siano tutto questo in oop in senso Prototipo. ancora, codificando jQuery ti ritroverai a fare affidamento su JSON, che credo sia la cosa più vicina allo pseudo-ufficiale che potresti ottenere.

parte della roba di jQuery ui in realtà esegue iterazioni su tutte le proprietà di un parametro che si passa, e fa roba con esso, il che significa che non si può fare, ad esempio, Object.prototype affatto, perché questo aggiungerà cose ad ogni oggetto, che jQuery ui proverà a trattare come parametro rilevante.

velocità e la scalabilità è incredibile, però, quindi direi che è una questione di tempo prima che si ottiene oltre Prototype, e COMETO patti con il fatto che la risposta di Justin rende effettivamente un valido punto :)

0

jQuery non ha diretto supporto integrato per la classe di creazione come prototipo fa

in quanto non dovrebbe. La creazione della classe è preferibile al programmatore, non alla biblioteca. Ho iniziato con la libreria Prototype e mi sono trasferito, perché era così gonfio. OOP in JavaScript non è affatto difficile. Finché sai come usare i prototipi starai bene.

Rendere l'equivalente di membri privati ​​in JavaScript diventa difficile quando si tratta di Prototype Class.create. E onestamente, non penso che lo Class.create ti fornisca qualcosa di utile, che non puoi fare facilmente da solo o con jQuery.

È sempre possibile utilizzare entrambe le librerie allo stesso tempo per facilitare la transizione. jQuery ha questa bella funzione noConflict che restituisce la funzione $ al suo proprietario originale.

Problemi correlati