Co robi symbol `# 'w JavaScript?

Nov 23 2020

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

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

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
3 Mr.Alien Nov 23 2020 at 13:05

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 initmetodę, z someObjktórej można wywołać jako someObj.init(), podczas gdy twoja someMethodnie będzie dostępna poza swoją metodą nadrzędną.

Przykład:

someObj.init(); //works
someObj.someMethod(); //won't be accessible
1 Jondi Nov 23 2020 at 13:08

hash służy do definiowania prywatnych pól klas