जावास्क्रिप्ट में `#` प्रतीक क्या करता है?

Nov 23 2020

मुझे उस कोड का सामना करना पड़ा जिसमें #हस्ताक्षर थे। इसका क्या उपयोग है? कोड कुछ इस तरह दिखता है:

class someObject{
  #someMethod(){
    //do something 
  }
}

जवाब

5 T.J.Crowder Nov 23 2020 at 20:05

यह एक सतर्क (एक ऑपरेटर के बजाय) है जो इंगित करता है कि सदस्य निजी है - इस मामले में, एक निजी विधि , लेकिन इसका उपयोग निजी क्षेत्रों में भी किया जाता है ।

आप उन्हें घोषित करने वाले वर्ग के बाहर एक निजी विधि या निजी क्षेत्र का उपयोग नहीं कर सकते। उदाहरण के लिए:

class Example {
    doSomething() {
        this.#method("from doSomething"); // <== Works
    }
    #method(str) {
        console.log("method called: " + str);
    }
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
3 Mr.Alien Nov 23 2020 at 20:05

यह एक प्रायोगिक प्रस्ताव है। आप निजी जावास्क्रिप्ट विधियों का उपयोग करके परिभाषित कर सकते हैं#

अधिक जानकारी के लिए, आप एमडीएन डॉक्स का उल्लेख कर सकते हैं

वर्ग गुण डिफ़ॉल्ट रूप से सार्वजनिक होते हैं और उन्हें कक्षा के बाहर जांच या संशोधित किया जा सकता है। हालांकि, हैश उपसर्ग का उपयोग करके निजी वर्ग के क्षेत्रों को परिभाषित करने की अनुमति देने के लिए एक प्रयोगात्मक प्रस्ताव है #


आप 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
1 Jondi Nov 23 2020 at 20:08

हैश का उपयोग निजी वर्ग के क्षेत्रों को परिभाषित करने के लिए किया जाता है