Cosa fa il simbolo "#" in JavaScript?
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
È 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
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
hash viene utilizzato per definire i campi delle classi private