2012-03-21 16 views
6

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

+0

बैकबोन.जेएस, और शायद कॉफ़ीस्क्रिप्ट पर एक नज़र डालें। वे एक साथ बहुत अच्छी तरह से काम करते हैं। – asawyer

+13

जावास्क्रिप्ट वस्तु-उन्मुख है। कुछ ओओ विचारों के लिए – Gumbo

+0

[हेलीफेंट] (http://helephant.com/2008/08/17/how-javascript-objects-work/) देखें। – jbabey

उत्तर

6

आप ओओपी सिद्धांतों को जावास्क्रिप्ट विकास में भी लागू कर सकते हैं। जावास्क्रिप्ट प्रोटोटाइप विरासत का उपयोग करता है, लेकिन यह एक कार्यान्वयन विस्तार है। अवधारणाएं अभी भी वही हैं। जिन अवधारणाओं के साथ आप परिचित हैं उनमें से अधिकांश जावास्क्रिप्ट में प्रत्यक्ष अनुरूप हैं।

अन्य कोशिश की और सही तरीके के रूप में अच्छी तरह से लागू होते हैं:

1) स्टे सूखी - अपने आप को दोहराएँ न करें। डुप्लिकेट कोड हमेशा बुरा है।
2) अलग-अलग चिंताओं - कोड को साफ रखने और केवल 1 चीज करने के लिए एमवीसी या एमवीवीएम पैटर्न का उपयोग करें।
3) टेस्ट - जब मैं अपने दिमाग को "बनाए रखने में मुश्किल" सुनता हूं तो परीक्षणों की कमी में अनुवाद करता है। आप निश्चित रूप से जावास्क्रिप्ट परियोजनाओं के लिए यूनिट परीक्षण लिख सकते हैं।
4) कोड समीक्षा - कोड समीक्षा दोहराया कोड को खारिज का एक अच्छा तरीका है, कोड है जो ठीक से तैयार नहीं है, फ़ॉर्मेट नहीं किया गया, आदि ....

वस्तुओं
+0

... अच्छा, पर्याप्त बंद करें। भेद हालांकि जानना महत्वपूर्ण है; यह निश्चित रूप से एक लंबे समय के लायक है। –

+0

आपका मतलब क्या है 'पर्याप्त बंद करें'? क्या आप असहमत हैं? – hvgotcodes

+0

एक प्रोटोटाइप उप-वर्ग के समानार्थी नहीं है; फ़ील्ड और फ़ंक्शंस को कैसे अपनाया जाता है, इस बारे में कुछ अंतर हैं। उदाहरण के लिए, प्रोटोटाइप साझा करने वाली कई ऑब्जेक्ट्स सचमुच एक प्रोटोटाइप फ़ील्ड साझा करती हैं, और इसे बदलकर सभी उप ऑब्जेक्ट्स के लिए एक संपत्ति बदल सकती है। –

-1

जावास्क्रिप्ट में कार्य कर रहे हैं हो सकता है; Mozilla Developer Network,McKoss,SitePoint, और JavaScript Kit आगे बताएं।

उदाहरण जावास्क्रिप्ट ऑब्जेक्ट

function myObj() { 
    this.myMethod = function() { 
    alert('hello'); 
    } 
} 
var demo_obj = new myObj(); 
demo_obj.myMethod(); 

के पैटर्न नियंत्रण

  • यहाँ सूचीबद्ध पैटर्न जावास्क्रिप्ट करने के लिए विशेष कर रहे हैं के तहत चीजें रखने के लिए।
    1. Use a Script Loader
    2. Use a JS Framework
    3. Lint your JavaScript. - उपकरण आपके डेस्कटॉप पर राइनो या नोड में चलाने के लिए उपलब्ध हैं।
    4. Minify your JS.
  • यहाँ सूचीबद्ध पैटर्न OOP बोली के प्रतीक हैं, और जावास्क्रिप्ट के लिए विशेष नहीं हैं।
    1. DRY - अपने आप को दोहराएं मत।
    2. पर्यवेक्षक (पब/उप) पैटर्न।

को विरोधी पैटर्न चीजें नियंत्रण

  1. से बाहर जाने नेमस्पेस को दूषित eval() वस्तु वस्तु
  2. इनलाइन स्क्रिप्ट के खिलाफ
  3. प्रोटोटाइप की
  4. उपयोग टैग।
  5. दस्तावेज़.लिखें
+3

और यह सवाल का जवाब कैसे देता है? – delnan

0

के उपयोग जब मैं एक ही स्थिति में था मैं "कैसे अन्य किया" देखने के लिए शुरू कर दिया। यह http://dojotoolkit.org/ और http://jquery.com के साथ समाप्त हुआ और मैं देख रहा था कि वे विजेट/प्लगइन्स को कैसे कार्यान्वित करते हैं ताकि अन्य ढांचे का विस्तार कर सकें।

2

इस प्रकार आप जावास्क्रिप्ट में ऑब्जेक्ट्स और विधियों को परिभाषित करते हैं।

function SomeObj() { 

    this.someMethod = function() { 
     alert('boo'); 
    } 
} 

var o_obj = new SomeObj(); 
o_obj.someMethod(); //alerts "boo" 

उम्मीद है कि यह मदद करता है।

आप स्थैतिक कार्यों को बनाने के लिए प्रोटोटाइप का भी उपयोग कर सकते हैं।

this.prototype.someMethod = function() { 
    alert('boo'); 
} 
+0

कृपया 'कुछ ओबीजे' में * पहले पूंजी अक्षर * का उपयोग करें। यह जावास्क्रिप्ट में मानक नामकरण रूपांतरण है। यह दिखाता है कि ऑब्जेक्ट का उदाहरण बनाने के लिए किसी को 'नया' होना चाहिए। उदाहरण के लिए तुलना करें 'var अब = नई तिथि(); '। – Oleg

+0

यह सच है। ऑब्जेक्ट नाम भी नीले रंग में बदल गए, अब वे पूंजी पत्र से शुरू होते हैं। – c0d3Junk13

+0

मैं आपको कोड को सत्यापित करने के लिए http://www.jslint.com/ का उपयोग करने के लिए अतिरिक्त रूप से अनुशंसा करता हूं। आप । आपको अपने पिछले कोड में 'ए कन्स्ट्रक्टर नाम' कुछ ओबीजे 'को अपरकेस लेटर' संदेश से शुरू होना चाहिए। इसके अतिरिक्त आप पाएंगे कि आपको ';' शामिल करना चाहिए 'this.someMethod = function() {चेतावनी ('बू') के बाद; } 'क्योंकि यह असाइनमेंट स्टेटमेंट है। – Oleg

0

जावास्क्रिप्ट में (new की आवश्यकता के बिना) सरल वस्तुओं और तरीकों को परिभाषित करने का एक और तरीका।

function creaeSomeObj() { 
    var that = {}; 
    that.someMethod = function() { 
     alert('boo'); 
    } 
    return that; 
} 

var o_obj = createSomeObj(); 
o_obj.someMethod(); //alerts "boo" 

यह पैटर्न विरासत का समर्थन नहीं करता है, लेकिन कई बार यह पर्याप्त है।

0

क्यों "बनाम"? जावास्क्रिप्ट ऑब्जेक्ट उन्मुख प्रोग्रामिंग का समर्थन करता है, लेकिन परंपरागत क्लास-आधारित तरीके से नहीं जो आप देखते हैं उदा। जावा।

जावास्क्रिप्ट के ओओपी कार्यों को आमतौर पर "प्रोटोटाइप विरासत" या अधिक विशेष रूप से "प्रतिनिधि प्रोटोटाइप विरासत" के रूप में जाना जाता है। इसे किसी ऑब्जेक्ट में "अगर आप संपत्ति 'foo' की तलाश में हैं, तो उसे उबलाया जा सकता है, और आप इसे वहां नहीं ढूंढ सकते हैं, फिर ऑब्जेक्ट के प्रोटोटाइप के अंदर 'foo' ढूंढने का प्रयास करें। यही है, संपत्ति का लुकअप ऑब्जेक्ट के प्रोटोटाइप पर का प्रतिनिधि है (हम कहते हैं कि ऑब्जेक्ट प्रोटोटाइप से गुण विरासत में है)।

जिस तरह प्रोटोटाइप विरासत कार्य करता है उसके कुछ प्रभाव होते हैं। उदाहरण के लिए:

  • जावास्क्रिप्ट में ऑब्जेक्ट्स इस अर्थ में "गतिशील" हैं कि वे केवल नाम-मूल्य जोड़े का समूह हैं। रनटाइम के दौरान नई गुणों को जोड़ा और हटाया जा सकता है, इसलिए वे विशिष्ट वर्ग भावनाओं में वस्तुओं की तुलना में बहुत कम "स्थैतिक" हैं।
  • रास्ता delegative मूलरूप विरासत काम करता है ("अगर आप प्रोटोटाइप यहाँ नहीं मिल रहा है, तो यहाँ देखने के बजाय") का अर्थ है कि यह बहुत सरल शास्त्रीय OOP से है। पूरी तरह से प्रोटोटाइप दृष्टिकोण से, आपको रचनाकारों की आवश्यकता नहीं है, उदाहरण के लिए। "तरीके" केवल नियमित कार्य होते हैं जो प्रोटोटाइप से जुड़े होते हैं (जिसका अर्थ है कि वे सभी विरासत वस्तुओं पर गुण के रूप में उपलब्ध हैं)।

समर्थक है और चोर के दोनों मूलरूप और शास्त्रीय विरासत के साथ कर रहे हैं, लेकिन यह याद रखना है कि वे अलग रहे महत्वपूर्ण है।

अब, जावास्क्रिप्ट जावा और अन्य शास्त्रीय भाषाओं से प्रेरित कुछ इंद्रियों में है, इसलिए उन्होंने कक्षाओं को शुरू करने के लिए लोगों के लिए सिंटैक्स "वर्ग जैसी" बनाने का फैसला किया। मैं इस पर बहुत विस्तार नहीं करूंगा; यह पहले से ही अन्य स्थानों में काफी हद तक दस्तावेज है।

कुछ रोचक पोस्ट:

0

Pluralsight इस विषय पर एक कोर्स है: Structuring JavaScript Code जो कुछ अंतर्दृष्टि प्रदान कर सकता है। दो चेतावनी: 1. मैं अभी तक पाठ्यक्रम के माध्यम से नहीं बैठा हूं - लेकिन सामग्री बहुत अच्छी लगती है और मैं अपने द्वारा उठाए गए अन्य Pluralsight पाठ्यक्रमों से प्रभावित हूं, और 2. यह मुफ़्त नहीं है (लेकिन छोटे $ यह आपको सड़क बी/सी के नीचे समय बचाता है आपके पास बेहतर कोड संरचना है)। नहीं, मैं Pluralsight के लिए काम नहीं करता।

इस धागे में उल्लिखित जेएस ढांचे के अलावा, नॉकआउटज भी देख सकते हैं - learnknockoutjs.com पर महान ट्यूटोरियल। नॉकआउट एमवीवीएम केंद्रित है। नोट, स्टैक ओवरफ्लो comparing Backbone to Knockout में एक अच्छी चर्चा है, और प्लुरसाइट के पास नॉकआउट का उपयोग करने का एक कोर्स भी है जिसे मैंने देखा है और अनुशंसा करता हूं।

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