Cosa fa il simbolo "#" in JavaScript?

Nov 23 2020

Ho riscontrato del codice che conteneva il #segno. A cosa serve? Il codice ha un aspetto simile a questo:

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

Risposte

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

È un sigillo (piuttosto che un operatore) che indica che il membro è privato, in questo caso un metodo privato , ma viene utilizzato anche per i campi privati .

Non è possibile utilizzare un metodo privato o un campo privato nel codice al di fuori della classe che li dichiara. Per esempio:

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

Questa è una proposta sperimentale. È possibile definire metodi JavaScript privati ​​utilizzando#

Per maggiori informazioni, puoi fare riferimento ai documenti MDN

Le proprietà della classe sono pubbliche per impostazione predefinita e possono essere esaminate o modificate all'esterno della classe. Esiste tuttavia una proposta sperimentale per consentire la definizione di campi di classi private utilizzando un #prefisso hash .


Puoi ottenere qualcosa di simile usando ES5 (solo per semplicità da spiegare), dove puoi simulare qualcosa come metodi privati ​​(che JavaScript non ne ha uno in modo nativo).

Per esempio:

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

In quanto sopra, esporrà solo il initmetodo dal someObjquale può essere chiamato someObj.init(), mentre il tuo someMethodnon sarà accessibile al di fuori del suo metodo genitore.

Esempio:

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

hash viene utilizzato per definire i campi delle classi private