Was macht das Symbol # # in JavaScript?

Nov 23 2020

Ich bin auf Code gestoßen, der das #Zeichen enthielt . Was wird es verwendet? Der Code sieht ungefähr so ​​aus:

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

Antworten

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

Es ist ein Siegel (und kein Operator), das angibt, dass das Mitglied privat ist - in diesem Fall eine private Methode , die jedoch auch für private Felder verwendet wird .

Sie können keine private Methode oder kein privates Feld in Code außerhalb der Klasse verwenden, die sie deklariert. Zum Beispiel:

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

Dies ist ein experimenteller Vorschlag. Sie können Private JavaScript-Methoden mit definieren#

Weitere Informationen finden Sie in den MDN-Dokumenten

Klasseneigenschaften sind standardmäßig öffentlich und können außerhalb der Klasse untersucht oder geändert werden. Es gibt jedoch einen experimentellen Vorschlag , private Klassenfelder mit einem Hash- #Präfix zu definieren.


Mit ES5 können Sie etwas Ähnliches erreichen (nur der Einfachheit halber), wo Sie so etwas wie private Methoden simulieren können (für die JavaScript nativ keine hat).

Zum Beispiel:

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
  }
}

Oben wird nur die initMethode verfügbar gemacht , von der aus someObjaufgerufen werden kann someObj.init(), während auf Ihre someMethodMethode außerhalb der übergeordneten Methode nicht zugegriffen werden kann.

Beispiel:

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

Hash wird verwendet, um private Klassenfelder zu definieren