O que o símbolo `#` faz em JavaScript?
Encontrei o código que continha o #sinal. Para que isso é usado? O código é parecido com este:
class someObject{
#someMethod(){
//do something
}
}
Respostas
É um sigilo (ao invés de um operador) que indica que o membro é privado - neste caso, um método privado , mas também é usado para campos privados .
Você não pode usar um método privado ou campo privado no código fora da classe que os declara. Por exemplo:
class Example {
doSomething() {
this.#method("from doSomething"); // <== Works
}
#method(str) {
console.log("method called: " + str);
}
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
Esta é uma proposta experimental. Você pode definir métodos JavaScript privados usando#
Para obter mais informações, você pode consultar os documentos MDN
As propriedades da classe são públicas por padrão e podem ser examinadas ou modificadas fora da classe. No entanto, existe uma proposta experimental para permitir a definição de campos de classe privada usando um
#prefixo hash .
Você pode conseguir algo semelhante usando ES5 (apenas por uma questão de simplicidade para explicar), onde você pode simular algo como métodos privados (que o JavaScript não tem nativamente).
Por exemplo:
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
}
}
Acima, ele apenas exporá o initmétodo do someObjqual pode ser chamado como someObj.init(), enquanto o seu someMethodnão estará acessível fora de seu método pai.
Exemplo:
someObj.init(); //works
someObj.someMethod(); //won't be accessible
hash é usado para definir campos de classe privada