2009-07-08 24 views
15

Kısa bir süre önce, Class.treate() işlevinin adil bir şekilde kullanılmasını sağlayan Prototype kullanarak bir web uygulaması oluşturduk. Şu anda, 'daha iyi' bir kütüphane olarak görüleceği için jQuery'ye geçiş yapmayı düşünüyoruz. Konu hakkında biraz okuma yapıyorum ve jQuery'nin Prototype gibi sınıf oluşturma için basit bir yerleşik desteğe sahip olmadığını öğrendim. Tabii ki, yine .prototype ve jQuery.extend (https://stackoverflow.com/questions/79477/how-to-create-an-object-oriented-class-in-jquery belirtildiği gibi) var, ama biraz daha arama yaptıktan sonra jQuery gerçekten senaryo bu şekilde sizi 'istiyorum' gelmediğini düşünmektedir ... gotjQuery neden düzenli OOP kullanımını engelliyor gibi görünüyor?

Aynı sayfada John Resig'in klas eklentisinden bahsediyor, bu bana harika görünüyor. Ancak, sayfa aslında bir Nisan Şakası Günü şakası olduğunu ve Resig'in bu kodu kullanmama konusunda tavsiyede bulunduğunu belirtiyor. Mecbur olduğum için mutluyum ama tüm bunların sebebinin ne olduğunu ve elbette bunun yerine ne yapmak istediğinizi anlamak istiyorum. Birisi beni aydınlatır mı? ilginç cevaplar için

-edit-

teşekkürler. Açıklık sağlamak için: Bu, Prototipte yaptığım sınıfları, bir sınıfı “şekillendirmenin” jQuery yoluna yeniden yazmak ve daha önce olduğu gibi aynı şekilde kullanmak anlamına geliyor mu? Yoksa bu hala kötü bir uygulama olarak görülüyor ve farklı bir yaklaşım kullanmalı mıyım?

+4

Bilgileriniz için JavaScript sınıf tabanlı bir dil değildir. Prototip tabanlı bir dil. – rahul

+0

... ve Lisp'e C'den daha çok benzer: http://javascript.crockford.com/javascript.html – Boldewyn

+0

(Farkı görmek için dört yıl avantajı olan birinden) Bu [makale] bile olsa (http://jqueryvsmootools.com/) Mootools vs JQuery hakkında, Mootools'un arkasındaki mantık esasen PrototypeJS için geçerli. [Motto] (http://jqueryvsmootools.com/#mottos) bölümü hepsini söylüyor. TL; DR; JQuery, DOM manipülasyonu için tasarlanırken Mootool (ve Prototip), DOM ** ve ** prototip taban dili üzerinde sınıf tabanı OOP gibi ek yardımcı programlar ile tasarlanmıştır. – OnesimusUnbound

cevap

11

"nesne yönelimli javascript" İlk bok Google arama bu kadar açık ... ama ben anlatmak istediğim noktayı açıklıyor:

JavaScript Object-Oriented Programming

Sadece seni ilk paragrafta bakmak ve bulmak:

Javascript tam bir nesne yönelimli programlama dili değil. JS'deki sınıfların kullanımı, prototip işlevselliğine dayanmaktadır. Prototip kitaplığı, sınıfınızı oluşturmak için prototip işlevinin kullanımını maskeler. jQuery, prototip işlevselliğini, jQuery'nin kendisini genişletmek ve kendi özel nesnelerinizi oluşturmak için düzenli JS kullanacağınız şekilde kullanmanızı bekler.

+7

jQuery, JavaScript'i geliştirir ve başka bir dili simüle etmeye çalışmaz. +1 – Boldewyn

+4

Alınan paragraf yanlış yazılmış. Javascript tamamen Nesne Yönelimli bir programlama dilidir. Bu, sınıf tabanlı bir OO dili değil. Prototype tasarımcıları, bir çok insanı daha rahat hissettirmek için bir miktar Class-fu sağlamaya karar verdiler (benimle başladığım zaman dahil). Crockford'un "Javascript: İyi Parçalar" ı okudum, şimdi bunun bir hata olduğunu düşünüyorum. –

+0

@Colin: doğru. ve evet, toplam hata. Aynı sebeplerden dolayı Dojo'dan hoşlanmıyorum. –

1

Prototip'ten jQuery'ye dönüştürmeyle tam olarak aynı problemi yaşadım ve hala sadece evet diyebileceğimi düşünüyorum, hepsi Prototip anlamında oo olmayacak gibi görünüyor. yine de, jQuery'yi kodlamak, JSO'ya güvenerek kendinizi bulmaya başlayacak, sanırım alacağınız sözde resmi en yakın şeydir.

jQuery ui öğelerinden bazıları, geçirdiğiniz bir parametrenin tüm özelliklerinin üzerinde yineleme yapar ve bununla bir şeyler yapar, yani, Object.prototype öğesinde yapamayacağınız anlamına gelir. jQuery ui ilgili bir parametre olarak ele almaya çalışacaktır.

hız ve ölçeklenebilirlik olsa şaşırtıcı, bu yüzden sen Prototip atlatmak ve

4

jQuery for JavaScript programmers açıklıyor :) Justin'in cevap aslında geçerli bir nokta yapar gerçeği ile terimleri yapabildi seçmesi an meselesi olduğunu söyleyebilirim jQuery'nin iyi OOP tekniklerini nasıl teşvik ettiği.

0

jQuery yerleşik destek sınıf yaratma için Prototip sevmediği

basit olarak bu olmamalı yoktur. Sınıf oluşturma en iyi programcıya değil, kütüphaneye bırakılır. Prototype kütüphanesi ile başladım ve taşındım çünkü çok şişti. JavaScript’te OOP hiç de zor değil. Prototipleri nasıl kullanacağınızı bildiğiniz sürece iyi olacaksınız.Prototip'in Class.create ile uğraşırken JavaScript'teki özel üye eşdeğerini eşdeğer hale getirme zorlaşır.Ve dürüst olmak gerekirse, Class.create'un kendinize ya da jQuery ile yapamayacağınız bir şey olduğunu sanmıyorum.

Geçişe yardımcı olmak için her iki kütüphaneyi de aynı anda kullanabilirsiniz. jQuery, $ işlevini özgün sahibine döndüren bu güzel noConflict özelliğine sahiptir.

İlgili konular