2009-07-08 11 views
15

हमने हाल ही में प्रोटोटाइप का उपयोग करके एक वेब ऐप बनाया है, जिससे इसकी कक्षा का उपयोग पर्याप्त है। क्रिएट() कार्यक्षमता। अभी, हम jQuery पर माइग्रेट करने पर विचार कर रहे हैं क्योंकि इसे 'बेहतर' लाइब्रेरी माना जाता है। मैं इस विषय पर कुछ पढ़ रहा हूं और पाया कि jQuery के वर्ग-निर्माण के लिए प्रोटोटाइप की तरह सरल अंतर्निहित समर्थन नहीं है। बेशक, अभी भी .prototype और jQuery.extend (जैसा कि https://stackoverflow.com/questions/79477/how-to-create-an-object-oriented-class-in-jquery में उल्लिखित है) है, लेकिन कुछ और खोज के बाद, मुझे यह महसूस हो गया कि jQuery वास्तव में आपको इस तरह से स्क्रिप्ट नहीं करना चाहता ...jQuery नियमित ओओपी के उपयोग को हतोत्साहित क्यों करता है?

उसी पृष्ठ में जॉन रेजिग की क्लासी प्लगइन का उल्लेख करने वाला एक पोस्ट है, जो मेरे लिए बहुत अच्छा लग रहा था। हालांकि, पृष्ठ बताता है कि यह वास्तव में अप्रैल फूल दिवस मजाक था, और रेजिग वास्तव में कोड का उपयोग न करने की सलाह देता है। मुझे oblige करने में खुशी है, लेकिन मैं समझना चाहता हूं कि यह सब क्या कारण है, और, ज़ाहिर है, वे क्या चाहते हैं कि आप इसके बजाय करना चाहते हैं। क्या कोई मुझे प्रबुद्ध कर सकता है?

-edit-

दिलचस्प उत्तरों के लिए धन्यवाद। स्पष्टता के लिए: क्या इसका मतलब है कि प्रोटोटाइप में किए गए वर्गों को कक्षा को 'आकार देने' के jQuery तरीके से फिर से लिखना ठीक है, और फिर भी उन्हें पहले जैसा ही 'तरीके' में उपयोग करना ठीक है? या क्या यह अभी भी खराब अभ्यास माना जाता है, और क्या मुझे एक अलग दृष्टिकोण का उपयोग करना चाहिए?

+4

आपकी जानकारी के लिए जावास्क्रिप्ट एक क्लास आधारित भाषा नहीं है। यह एक प्रोटोटाइप आधारित भाषा है। – rahul

+0

... और सी के मुकाबले लिस्प के समान ही है: http://javascript.crockford.com/javascript.html – Boldewyn

+0

(किसी ऐसे व्यक्ति से जिसके पास अंतर देखने के लिए चार साल का लाभ है) भले ही यह [लेख] (http://jqueryvsmootools.com/) Mootools बनाम JQuery के बारे में है, Mootools के पीछे तर्क अनिवार्य रूप से प्रोटोटाइपजेएस पर लागू होता है। [आदर्श वाक्य] (http://jqueryvsmootools.com/#mottos) अनुभाग यह सब कहता है। टी एल; डॉ; JQuery को डीओएम मैनिपुलेशन के लिए डिज़ाइन किया गया है जबकि मूटूल (और प्रोटोटाइप) को डीओएम ** और ** अतिरिक्त यूटिलिटीज जैसे प्रोटोटाइप बेस भाषा आदि पर क्लास बेस ओओपी के साथ डिज़ाइन किया गया है। – OnesimusUnbound

उत्तर

11

के लिए "वस्तु उन्मुख जावास्क्रिप्ट" सबसे पहले भद्दा गूगल खोज इस कर दिया अप ... लेकिन यह बात मैं भर में प्राप्त करना चाहता था बताते हैं:

JavaScript Object-Oriented Programming

बस पहले पैराग्राफ पर एक नज़र डालें और आप ढूंढें:

जावास्क्रिप्ट पूरी तरह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा नहीं है। जेएस में कक्षाओं का उपयोग प्रोटोटाइप कार्यक्षमता पर आधारित है। प्रोटोटाइप लाइब्रेरी आपकी कक्षा बनाने के लिए प्रोटोटाइप कार्यक्षमता के उपयोग को मास्क करती है। jQuery आपको प्रोटोटाइप कार्यक्षमता का उपयोग करने की अपेक्षा करता है उसी तरह आप नियमित जेएस का उपयोग स्वयं jQuery को बढ़ाने और अपनी खुद की कस्टम ऑब्जेक्ट्स बनाने के लिए करेंगे।

+7

jQuery जावास्क्रिप्ट को बढ़ाता है और कुछ अन्य भाषा अनुकरण करने की कोशिश नहीं करता है। +1 – Boldewyn

+4

उद्धृत अनुच्छेद बस गलत है। जावास्क्रिप्ट पूरी तरह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा है। यह कक्षा-आधारित ओओ भाषा नहीं है। प्रोटोटाइप के डिजाइनरों ने बहुत से लोगों को अधिक आरामदायक बनाने के लिए कुछ क्लास-फू प्रदान करने का निर्णय लिया (मुझे सहित, जब मैंने इसके साथ शुरुआत की)। क्रॉकफोर्ड की "जावास्क्रिप्ट: द गुड पार्ट्स" पढ़ने के बाद, अब मुझे लगता है कि यह एक गलती थी। –

+0

@ कोलिन: सही। और, हाँ, कुल गलती। मैं उसी कारण से दोजो को नापसंद करता हूं। –

1

मुझे प्रोटोटाइप से jQuery में कनवर्ट करने के साथ बिल्कुल वही समस्या थी, और मैं अभी भी यह कहने के लिए सोच सकता हूं कि हाँ, ऐसा लगता है कि वे प्रोटोटाइप भावना में ओप में नहीं हैं। अभी भी, jQuery को कोडिंग करने से आप खुद को जेएसओएन पर भारी निर्भर करेंगे, जो मुझे लगता है कि छद्म-आधिकारिक निकटतम चीज आपको मिल जाएगी।

कुछ jQuery UI सामग्री वास्तव में आपके द्वारा पारित पैरामीटर के सभी गुणों पर पुनरावृत्त होती है, और इसके साथ सामान करती है, जिसका अर्थ है कि आप ऐसा नहीं कर सकते, कहें, ऑब्जेक्ट.प्रोटोटाइप बिल्कुल, क्योंकि इससे सामान शामिल होगा प्रत्येक ऑब्जेक्ट के लिए, कि jQuery ui एक प्रासंगिक पैरामीटर के रूप में इलाज करने की कोशिश करेगा।

की गति और scalability अद्भुत है, हालांकि है, इसलिए मैं इसे समय की बात है इससे पहले कि आप प्रोटोटाइप से अधिक मिलता है, और तथ्य यह है कि जस्टिन जबाब वास्तव में एक वैध बिंदु बनाता है :)

4

jQuery for JavaScript programmers बताते हैं के साथ मामले cometo कहेंगे कैसे jQuery अच्छी ओओपी तकनीकों को प्रोत्साहित करता है।

0

jQuery सीधा अंतर्निहित समर्थन वर्ग-सृजन के लिए प्रोटोटाइप की तरह करता है

के रूप में ऐसा नहीं होना चाहिए नहीं है। कक्षा निर्माण प्रोग्रामर के लिए सबसे अच्छा छोड़ दिया गया है, लाइब्रेरी नहीं। मैंने प्रोटोटाइप लाइब्रेरी के साथ शुरुआत की और चले गए, क्योंकि यह बहुत फूला हुआ था। जावास्क्रिप्ट में ओओपी बिल्कुल मुश्किल नहीं है। जब तक आप प्रोटोटाइप का उपयोग कैसे करें, तब तक आप ठीक होंगे।

प्रोटोटाइप के Class.create से निपटने के दौरान जावास्क्रिप्ट में निजी सदस्यों के बराबर बनाना मुश्किल हो जाता है। और ईमानदारी से, मुझे नहीं लगता कि Class.create आपको कुछ भी उपयोगी देता है, कि आप आसानी से या jQuery के साथ आसानी से नहीं कर सकते हैं।

आप संक्रमण के साथ मदद करने के लिए हमेशा एक ही समय में दोनों पुस्तकालयों का उपयोग कर सकते हैं। jQuery में यह अच्छी noConflict सुविधा है जो $ फ़ंक्शन को अपने मूल स्वामी को लौटाती है।

संबंधित मुद्दे