Was macht das Symbol # # in JavaScript?
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
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
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 init
Methode verfügbar gemacht , von der aus someObj
aufgerufen werden kann someObj.init()
, während auf Ihre someMethod
Methode außerhalb der übergeordneten Methode nicht zugegriffen werden kann.
Beispiel:
someObj.init(); //works
someObj.someMethod(); //won't be accessible
Hash wird verwendet, um private Klassenfelder zu definieren