Co robi symbol `# 'w JavaScript?
Napotkałem kod, który zawierał #
znak. Do czego jest to używane? Kod wygląda mniej więcej tak:
class someObject{
#someMethod(){
//do something
}
}
Odpowiedzi
Jest to sigil (a nie operator), który wskazuje, że członek jest prywatny - w tym przypadku jest to metoda prywatna , ale jest również używany w przypadku pól prywatnych .
Nie można użyć metody prywatnej ani pola prywatnego w kodzie poza deklarującą je klasą. Na przykład:
class Example {
doSomething() {
this.#method("from doSomething"); // <== Works
}
#method(str) {
console.log("method called: " + str);
}
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
To jest propozycja eksperymentalna. Możesz zdefiniować prywatne metody JavaScript przy użyciu#
Więcej informacji można znaleźć w dokumentacji MDN
Właściwości klasy są domyślnie publiczne i można je sprawdzać lub modyfikować poza klasą. Istnieje jednak eksperymentalna propozycja zezwalająca na definiowanie pól klas prywatnych przy użyciu
#
przedrostka z krzyżykiem .
Możesz osiągnąć coś podobnego za pomocą ES5 (tylko dla uproszczenia wyjaśnienia), gdzie możesz zasymulować coś takiego jak metody prywatne (których JavaScript nie ma natywnie).
Na przykład:
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
}
}
W powyższym przypadku ujawni tylko init
metodę, z someObj
której można wywołać jako someObj.init()
, podczas gdy twoja someMethod
nie będzie dostępna poza swoją metodą nadrzędną.
Przykład:
someObj.init(); //works
someObj.someMethod(); //won't be accessible
hash służy do definiowania prywatnych pól klas