जावास्क्रिप्ट में `#` प्रतीक क्या करता है?
मुझे उस कोड का सामना करना पड़ा जिसमें #हस्ताक्षर थे। इसका क्या उपयोग है? कोड कुछ इस तरह दिखता है:
class someObject{
#someMethod(){
//do something
}
}
जवाब
यह एक सतर्क (एक ऑपरेटर के बजाय) है जो इंगित करता है कि सदस्य निजी है - इस मामले में, एक निजी विधि , लेकिन इसका उपयोग निजी क्षेत्रों में भी किया जाता है ।
आप उन्हें घोषित करने वाले वर्ग के बाहर एक निजी विधि या निजी क्षेत्र का उपयोग नहीं कर सकते। उदाहरण के लिए:
class Example {
doSomething() {
this.#method("from doSomething"); // <== Works
}
#method(str) {
console.log("method called: " + str);
}
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
यह एक प्रायोगिक प्रस्ताव है। आप निजी जावास्क्रिप्ट विधियों का उपयोग करके परिभाषित कर सकते हैं#
अधिक जानकारी के लिए, आप एमडीएन डॉक्स का उल्लेख कर सकते हैं
वर्ग गुण डिफ़ॉल्ट रूप से सार्वजनिक होते हैं और उन्हें कक्षा के बाहर जांच या संशोधित किया जा सकता है। हालांकि, हैश उपसर्ग का उपयोग करके निजी वर्ग के क्षेत्रों को परिभाषित करने की अनुमति देने के लिए एक प्रयोगात्मक प्रस्ताव है
#।
आप ES5 का उपयोग करके कुछ ऐसा ही हासिल कर सकते हैं (केवल समझाने के लिए सरलता के लिए), जहां आप निजी तरीकों की तरह कुछ भी अनुकरण कर सकते हैं (जिसमें जावास्क्रिप्ट एक मूल रूप से नहीं है।)
उदाहरण के लिए:
function someObj() { //assuming this is a class definition
function someMethod() { //private method which is not accessible outside someObj
}
function init() { //initializes some methods or code, private methods can be used here
someMethod();
}
return {
init //only exposes the init method outside
}
}
उपरोक्त में, यह केवल उस initविधि को उजागर करेगा someObjजिसमें से इसे कहा जा सकता है someObj.init(), जबकि आपकी someMethodमूल विधि के बाहर आपकी पहुंच नहीं होगी।
उदाहरण:
someObj.init(); //works
someObj.someMethod(); //won't be accessible
हैश का उपयोग निजी वर्ग के क्षेत्रों को परिभाषित करने के लिए किया जाता है