¿Qué hace el símbolo '#' en JavaScript?

Nov 23 2020

Encontré un código que contenía el #letrero. ¿Para qué se usa esto? El código se parece a esto:

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

Respuestas

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

Es un sigilo (en lugar de un operador) que indica que el miembro es privado; en este caso, un método privado , pero también se usa para campos privados .

No puede usar un método privado o un campo privado en el código fuera de la clase que los declara. Por ejemplo:

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

Esta es una propuesta experimental. Puede definir métodos de JavaScript privados utilizando#

Para obtener más información, puede consultar los documentos de MDN

Las propiedades de la clase son públicas de forma predeterminada y se pueden examinar o modificar fuera de la clase. Sin embargo, existe una propuesta experimental que permite definir campos de clase privados utilizando un #prefijo hash .


Puede lograr algo similar usando ES5 (solo para simplificar la explicación), donde puede simular algo como métodos privados (que JavaScript no tiene uno de forma nativa).

Por ejemplo:

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

En lo anterior, solo expondrá el initmétodo desde el someObjcual se puede llamar como someObj.init(), mientras que su someMethodno será accesible fuera de su método principal.

Ejemplo:

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

hash se utiliza para definir campos de clase privados