तो, पहले सवाल यहां - कृपया नम्र रहें।मैं जावास्क्रिप्ट ऑब्जेक्ट नाम कैसे सेट कर सकता हूं जो console.log में वापस आ जाता है?
मैं विभिन्न गैर-वेब प्रोग्रामिंग पृष्ठभूमि से कुछ अन्य डेवलपर्स के साथ एक काफी जावास्क्रिप्ट भारी परियोजना पर काम कर रहा हूं और हमने अपने जावास्क्रिप्ट psuedo-classesभागों में सार्वजनिक और निजी विधियों और गुणों को पूरी तरह से कोशिश करने और उपयोग करने का निर्णय लिया है अच्छा कोडिंग अभ्यास (यानी हम जानते हैं कि इसमें कोई वास्तविक लाभ या सुरक्षा नहीं है)
हमने सार्वजनिक & निजी (यानी स्थानीय रूप से स्कॉप्ड वेरिएबल्स और सार्वजनिक खपत के लिए विशेषाधिकार प्राप्त तरीकों के साथ कार्यों का उपयोग करने के कुछ अलग तरीकों से खिलवाड़ किया है।) और वर्तमान में हम अपने जावास्क्रिप्ट क्लास कन्स्ट्रक्टरों को वास्तव में एक ऑब्जेक्ट वापस करने पर बस गए हैं जो केवल उनके सार्वजनिक इंटरफ़ेस का प्रतिनिधित्व करता है, जो प्रभावी रूप से अन्य सभी को छुपाता है।
यहाँ एक उदाहरण है:
function MyObject()
{
var _this = this;
this._privateProperty = 'somevalue';
this._privateMethod = function()
{
// Do Something
}
this.public =
{
publicProperty : _this._privateProperty,
publicMethod : function(){ return _this.privateMethod() }
}
return this.public;
}
कौन सा instantiated जब और लॉग इन क्रोम में:
var obj = new MyObject();
console.log(obj);
आउटपुट:
> Object
> publicMethod: function(){ return _this.privateMethod() }
> publicProperty: "somevalue"
>__proto__: Object
अब मेरे सवाल का: क्योंकि सार्वजनिक लौट रहे थे जब आप console.log करेंगे तो कन्स्ट्रक्टर से नई ऑब्जेक्ट के रूप में इंटरफ़ेस ध्यान दें कि यह खुद को > Object
के रूप में पहचानता है - जबकि यदि हम उस सार्वजनिक इंटरफ़ेस को वापस नहीं करते हैं तो इसे > MyObject
के रूप में पहचाना जाता है।
आदर्श रूप में, हम बाद में डिबगिंग उद्देश्यों के लिए प्रदर्शित करना चाहते हैं और मुझे पता है कि _this.constructor.name
के साथ नियंत्रक के "मायऑब्जेक्ट" नाम को कैसे पहुंचाया जाए, लेकिन इस बारे में कोई जानकारी नहीं है कि इसे कैसे सेट किया जाए।
क्या कोई इसे मैन्युअल रूप से सेट करने के बारे में जानता है?
नोट:
मैं जानता हूँ कि यह कुछ मायनों में जावास्क्रिप्ट सम्मेलन के एक bastardization और एक गोल छेद में एक वर्ग खूंटी फिट करने की कोशिश है, लेकिन हम यह एक बहुत ही स्पष्ट और पठनीय तरीका क्या हासिल करना हो पाया हम करने की कोशिश कर रहे थे। मैं इस बारे में सुझावों के लिए खुला हूं कि इसे एक अलग डिज़ाइन के साथ कैसे पूरा किया जाए, लेकिन आखिर में मैं एक ऐसे उत्तर की तलाश कर रहा हूं जो हमारे वर्तमान डिज़ाइन को फिट करे।
मुझे यह देखने में थोड़ा आश्चर्य हुआ कि आपको रिटर्न वैल्यू प्राप्त हुआ है। होना चाहिए क्योंकि यह निर्मित वस्तु की एक संपत्ति है। उसे नहीं पता था। वैसे भी, आप एक सादा ऑब्जेक्ट लौट रहे हैं, इस प्रकार डेवलपर टूल द्वारा इसकी रिपोर्ट की जाएगी। यदि आप अपने डिज़ाइन को फिट करने वाले उत्तर की तलाश में हैं, तो मुझे लगता है कि मुझे यह पूछना होगा कि आप अपने डिज़ाइन से किस तरह के विचलन की अनुमति देंगे? – user113716
... वापसी मूल्य के संबंध में, मैंने सोचा कि इसे अनदेखा किया गया था जब निर्माता को 'नया' कहा जाता है। ऐसा लगता है कि यह किसी भी प्रकार का ऑब्जेक्ट लौटाएगा। – user113716
ठीक है, हमने सोचा था कि एक ही नामित वस्तु में सभी सार्वजनिक इंटरफेस उपन्यास थे - इस तरह हम वास्तव में कक्षाओं के सार्वजनिक तरीकों और गुणों के लिए आंतरिक संदर्भ बना सकते हैं। मैं उम्मीद कर रहा था कि "ओह हाँ, बस ऑब्जेक्ट.नाम = _this.constructor.name" को सार्वजनिक रूप से वापस करें - लेकिन मैं डिज़ाइन परिवर्तनों का मनोरंजन करने के लिए तैयार हूं जो अभी भी स्पष्ट और पठनीय हैं :) – drewdah