सी # प्रोग्रामर के रूप में, मेरे पास निजी चीजों को निजी बनाने की आदत है जो निजी हो सकती है और निजी होनी चाहिए, और जब भी एक जेएस प्रकार मेरे सभी निजी हिस्सों को मेरे सामने उजागर करता है तो मुझे हमेशा अजीब लग रहा है (और यह महसूस नहीं है ' जगाया ')। मान लें कि मेरे पास एक प्रकार है जिसमें 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)
के प्रदर्शन प्रभाव क्या हैं?
मैं शायद आपके प्रश्न को गलत समझता हूं, लेकिन विकल्प 1 में ड्रॉ बैकग्राउंड/ड्राउरग्राउंड सार्वजनिक है (भले ही आप उन्हें निजी होना चाहते हैं) ताकि आप केवल वही विकल्प प्राप्त कर सकें जो आप चाहते हैं 2 विकल्प। –
ठीक है, हाँ, यह मेरा सवाल है, क्या मुझे चीजों को निजी बनाना पसंद करना चाहिए? – JulianR