2011-04-28 8 views
9

मुझे यह जानने में थोड़ा परेशानी हो रही है कि मेरी जावास्क्रिप्ट को कैसे संरचित किया जाना चाहिए, आदि .. PHP, एक्शनस्क्रिप्ट 3 जैसी भाषाओं में मेरे ओओपी कौशल, जो मैं मानता हूं, लेकिन जेएस इस कमी की कमी है जिसने मुझे मेरी शिक्षा में थोड़ा सा फेंक दिया है।मुझे अपनी जावास्क्रिप्ट को संरचित करने के लिए कैसे देखना चाहिए?

मुझे प्रोटोटाइप सुविधा की अस्पष्ट समझ है जिसे मैंने एएस 2 में थोड़ा उपयोग किया - मुझे विश्वास है कि यह सबसे नज़दीक है जिसे मैं प्राप्त करने में सक्षम हूं। फिलहाल, मैं अपने कोड समान बिछाने कर रहा हूँ यह करने के लिए:

var slideshow = 
{ 
    property: value, 

    /** 
    * This is a method 
    */ 
    myMethod: function() 
    { 
     // do method things 
    } 
}; 

// ------ 
slideshow.property ++; 
slideshow.myMethod(); 

यह सब ठीक काम करता है, लेकिन यह शून्य मेरी तरह कुछ करने की क्षमता है:

var myslideshow1 = new Slideshow(); 
var myslideshow2 = new Slideshow(); 

myslideshow1.property = 10; 
myslideshow2.property = 16; 
  1. मैं नहीं कर रहा हूँ सुनिश्चित करें कि मैंने "ऑब्जेक्ट" के दो अलग-अलग उदाहरण बनाने के बारे में कैसे जाना है (इस मामले में, स्लाइड शो)।
  2. मुझे कोई भी संसाधन नहीं मिल रहा है जो प्रोटोटाइप सुविधा को समझ में आता है।

कोई भी पॉइंटर्स supoib होगा।

उत्तर

4

किसी भी जावास्क्रिप्ट समारोह एक वर्ग के लिए एक निर्माता के रूप में कार्य कर सकते हैं, तो यह प्रयास करें:

function SlideShow(params) { 
    return { 
     property: value, 
     myMethod: function() { 
      //do method things 
     }; 
    }; 
}; 
var slideshow1 = new SlideShow(params); 
slideshow1.property = 10; 
//etc. 
+0

कि बहुत अच्छा है - तो बजाय एक वस्तु मेरे मान देने का, मैं उन्हें एक समारोह को दे रहा हूँ इसके बजाए - क्या वह सही है? – Marty

+0

@ मार्टी, बहुत ज्यादा। 'फ़ंक्शन' वास्तव में कक्षा के रूप में कार्य कर रहा है। –

+0

जीनियस - धन्यवाद। – Marty

2

मैं एक वर्ग के लिए तरीकों को जोड़ने के लिए वहाँ के रूप में प्रदर्शन किया जा सकता है प्रोटोटाइप का उपयोग कर Apon भ्रूभंग होगा मुद्दों

यहां एक नमूना वर्ग संरचना है जिसका आप उपयोग कर सकते हैं। जावास्क्रिप्ट कक्षाएं कार्यों से बहुत अलग नहीं हैं।

function MyItem(){ 
    this.d = ''; 
    this.clear = function() { 
    this.d = ''; 
    } 
} 
var myItem = new MyItem() 
myItem.d = "test"; 
alert(myItem.d); 
myItem.clear(); 
alert(myItem.d) 

Some good reading here

+0

लिंक के लिए धन्यवाद! – Marty

2

आप नए ऑपरेटर का उपयोग करने से बचना चाहिए, सब कुछ सार्वजनिक है। आप क्या करना चाहते हैं, और राशि निजी चर और कार्यों ऐसा करने के लिए एक बेहतर तरीका निम्न करने के लिए है:

var slideshow = function() { 
    var self = {}; 
    var private_param = "hello"; 
    var private_func = function(say) { 
     alert(say); 
    }; 
    var method = function() { 
     private_func(private_param); 
    }; 
    var param = 500; 

    self.method = method; 
    self.param = param; 

    return self; 
    // return object, with the method func and param param publicly accessible 
    // private_param and private_func are not accessible to the outside 
}; 

var presentation = slideshow(); // new slideshow, you could edit to pass in init params 
presentation.method(); // hello 
+0

अच्छी जानकारी - मैं AS3 आदि में निजी का एक बड़ा उपयोगकर्ता हूं, हालांकि सभी अतिरिक्त कोड इसे शायद ही इसके लायक लगते हैं। इसके अलावा, उप-वर्ग/सुपरक्लास के होने की कमी से ऐसा लगता है कि निजी कीवर्ड इसकी उपयोगिता का एक हिस्सा खो देता है? – Marty

+1

आप आसानी से विरासत कर सकते हैं। शुरुआत में, 'स्वयं' को एक खाली वस्तु बनाकर, आप एक और कार्य का उपयोग कर सकते हैं जो एक और वस्तु बनाता है। – gkz

+0

ध्यान में रखना एक बड़ी बात यह है कि जावास्क्रिप्ट में कक्षाएं नहीं हैं। यह वर्गों के लिए नहीं था। जावास्क्रिप्ट जावा, या सी ++ कई तरीकों से नहीं है। मैं जावास्क्रिप्ट पढ़ूंगा: गुड पार्ट्स। आप यहां एक पीडीएफ पा सकते हैं: http://eleventyone.done.hu/OReilly.JavaScript..Good.Parts.May.2008.pdf एक बार जब आप जावास्क्रिप्ट को समझना शुरू कर देते हैं तो आपको पता चलेगा कि यह वास्तव में एक और है जावा या सी ++ की तुलना में अभिव्यक्तिपूर्ण और शक्तिशाली भाषा। – gkz

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

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