2010-07-10 13 views
5

सी # प्रोग्रामर के रूप में, मेरे पास निजी चीजों को निजी बनाने की आदत है जो निजी हो सकती है और निजी होनी चाहिए, और जब भी एक जेएस प्रकार मेरे सभी निजी हिस्सों को मेरे सामने उजागर करता है तो मुझे हमेशा अजीब लग रहा है (और यह महसूस नहीं है ' जगाया ')। मान लें कि मेरे पास एक प्रकार है जिसमें draw विधि है, जो आंतरिक रूप से drawBackground और drawForeground पर कॉल करती है, जो स्वयं को नहीं कहने का कोई मतलब नहीं है। मुझे इसे कैसे कार्यान्वित करना चाहिए?जावास्क्रिप्ट: क्या मुझे अपने कार्यान्वयन को छुपाया जाना चाहिए?

विकल्प 1

Foo = function(){ 
    this.draw(); 
}; 

Foo.prototype.draw = function(){ 
    this.drawBackground(); 
    this.drawForeground(); 
}; 

Foo.prototype.drawBackground = function(){}; 
Foo.prototype.drawForeground = function(){}; 

विकल्प 2

Foo = (function(){ 

    var constructor = function(){ 
    this.draw(); 
    }; 

    var drawBackground = function(){}; 
    var drawForeground = function(){}; 

    constructor.prototype.draw = function(){ 
    drawBackground.call(this); 
    drawForeground.call(this); 
    }; 

    return constructor; 

})(); 

अंतर, ज़ाहिर है, जा रहा है कि पहले उदाहरण में, drawBackground और drawForeground तरीकों सार्वजनिक एपीआई का हिस्सा हैं , जबकि वे दूसरे में बाहर छुपा रहे हैं। क्या यह वांछनीय है? मुझे कौन सा पसंद करना चाहिए? क्या मैं जावास्क्रिप्ट में अपनी सी # आदतों को लागू करना गलत हूं और क्या मुझे जावास्क्रिप्ट में सबकुछ एक्स्टेंसिबल और ओवरराइड सक्षम करना चाहिए? और .call(this) के प्रदर्शन प्रभाव क्या हैं?

+0

मैं शायद आपके प्रश्न को गलत समझता हूं, लेकिन विकल्प 1 में ड्रॉ बैकग्राउंड/ड्राउरग्राउंड सार्वजनिक है (भले ही आप उन्हें निजी होना चाहते हैं) ताकि आप केवल वही विकल्प प्राप्त कर सकें जो आप चाहते हैं 2 विकल्प। –

+0

ठीक है, हाँ, यह मेरा सवाल है, क्या मुझे चीजों को निजी बनाना पसंद करना चाहिए? – JulianR

उत्तर

7

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

इसका उत्तर थोड़ा सा व्यक्तिपरक है, लेकिन मैं आपको बता दूंगा कि जब मैं जावास्क्रिप्ट लिख रहा हूं और यदि मैं .NET में कोडिंग कर रहा हूं तो विधियों या चरों को निजी होगा, मैं बस उन्हें कुछ पसंद करता हूं "prv_" या "p_" या बस "_" ... जो भी आपकी नाव तैरता है। इस तरह, आपने अपने उपयोगकर्ताओं को बताया है कि यह सामान निजी होने के लिए है और उनके अंतर्गत से बदल सकता है। और इस तरह, अगर वे आपकी निजी विधियों को वैसे भी कॉल करना चुनते हैं, तो अगर iffy कोड एक थके हुए अंगूठे की तरह बाहर निकल जाएगा।

+1

हाँ, मैं देखता हूं कि एक्स्टजेस जैसे ढांचे में बहुत कुछ, जहां चीजें '// निजी' के रूप में चिह्नित की गई हैं, भले ही वे पूरी तरह से पहुंच योग्य हों। – JulianR

+0

_ के साथ उपसर्ग करना पुस्तकालयों के बीच सबसे अधिक उपयोग किया जाने वाला अभ्यास प्रतीत होता है। कुछ टिप्पणी या @private JSdoc एनोटेशन का भी उपयोग करते हैं। –

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

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