निर्दिष्ट नहीं होने पर कौन से एक्सेस संशोधक निहित हैं?


138

सभी अलग-अलग अवधारणाओं के लिए जो एक्सेस मॉडिफायर्स का समर्थन करते हैं, जैसे कि फ़ील्ड, प्रॉपर्टीज़, मेथड्स और क्लासेस, जो एक्सेस मॉडिफायर्स निहित हैं यदि निर्दिष्ट नहीं हैं?


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

विनिर्देशन के आधार पर github.com/Microsoft/TypeScript/blob/master/doc/spec.md
basarat

1
इस प्रश्न और उत्तर को स्पष्ट करने के लिए, इसे स्पष्ट करने के लिए टाइपस्क्रिप्ट को प्रश्न में निर्दिष्ट किया जाना चाहिए। एक टाइपस्क्रिप्ट टैग है, लेकिन यह एकमात्र संकेत है कि हम scala, java, C #, C ++, .... पर चर्चा नहीं कर रहे हैं ...
absmiths

जवाबों:


216

एक में सब कुछ classहै public, तो निर्दिष्ट नहीं। moduleजब तक exportकीवर्ड का उपयोग नहीं किया जाता है तब तक सब कुछ निजी है।


6
स्टार्टर किट से खेलने वाले लोगों के लिए। उनमें से कुछ tslint के साथ जहाज करते हैं और यह बहुत भ्रमित कर सकता है। आपको यह संदेश दिखाई जब default access modifier on member/method not allowed चेक tslint.jsonडिफ़ॉल्ट या गर्भित पहुँच संशोधक अनुमति देने के लिए।
विष्टेश

1
क्या स्वचालित रूप से असाइन करने के लिए पूर्व-ट्रांसपाइल चरण का उपयोग करना संभव होगा private?
क्वर्टी

-4

मैं इससे सहमत नहीं हूं

यदि निर्दिष्ट नहीं है, तो कक्षा में सब कुछ सार्वजनिक है।

सब कुछ सार्वजनिक है, भले ही निजी इस्तेमाल किया जाए। बस ट्रांसप्लड कोड को देखें। निजी एनोटेट तरीके सार्वजनिक उपलब्ध होंगे। केवल ट्रांसप्लिंग त्रुटियों को फेंक देगा। सार्वजनिक और निजी दोनों में परिवर्तित किया जाएगा<Object>.prototype.funcName


24
हां, यह एक अच्छा बिंदु है। हालांकि, मेरा सवाल इसके which access modifiers are implied when not specifiedबजाय था can my code be accessed when an access modifier is not specified। एक्सेस संशोधक एक जावास्क्रिप्ट अवधारणा के बजाय टाइपस्क्रिप्ट अवधारणा है। इसलिए मुझे लगता है कि @ बेसरात के जवाब ने मुझे सवाल का मतलब बताया और सवाल के संदर्भ में सही प्रतीत होता है। शायद सवाल और जवाब में शब्दांकन को नापसंद करने के लिए कुछ जगह है।
सैम

कि टीएस कैसे काम करता है, यह आपके कोड को कोई फर्क नहीं पड़ता है, अगर यह टीएस के दृष्टिकोण से "सही" है, तो इसका मतलब है कि टीएस में सब कुछ कक्षाओं के अपवाद के बिना है, लेकिन मुख्य बिंदु यह है कि यदि आप टीएस चेतावनियों का सम्मान करते हैं - तो आप नहीं करेंगे निजी के रूप में चिह्नित गुणों तक पहुँचने।
एंड्रयू

3
मैं किसी भी भाषा के बारे में नहीं सोच सकता जहां कुछ वास्तव में निजी हो। C # में आप किसी भी निजी क्षेत्र में प्रतिबिंब के माध्यम से आसानी से प्राप्त कर सकते हैं । C या C ++ जैसी निम्न-स्तरीय भाषाओं में, आप केवल निजी बिंदुओं पर घूम सकते हैं। ओएस-स्तर पर सुरक्षा उपायों में से कुछ, जैसे डीईपी और एन्क्रिप्टेड मेमोरी, एक्सेस मोडिफ़ायर केवल संकलक द्वारा प्रदान की गई सहायता है जिससे आपको बेहतर कोड लिखने में मदद मिल सके। ...सही?
पबरानिस

@pbarranis निजी जावास्क्रिप्ट फ़ील्ड वास्तव में निजी हैं और जावास्क्रिप्ट रनटाइम के भीतर से उन्हें एक्सेस करने का कोई तरीका नहीं है।
योगू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.