Que fait le symbole «#» en JavaScript?

Nov 23 2020

J'ai rencontré du code contenant le #signe. A quoi cela sert? Le code ressemble à ceci:

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

Réponses

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

C'est un sigil (plutôt qu'un opérateur) qui indique que le membre est privé - dans ce cas, une méthode privée , mais il est également utilisé pour les champs privés .

Vous ne pouvez pas utiliser une méthode privée ou un champ privé dans le code en dehors de la classe les déclarant. Par exemple:

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

Ceci est une proposition expérimentale. Vous pouvez définir des méthodes JavaScript privées en utilisant#

Pour plus d'informations, vous pouvez vous référer à la documentation MDN

Les propriétés de classe sont publiques par défaut et peuvent être examinées ou modifiées en dehors de la classe. Il existe cependant une proposition expérimentale permettant de définir des champs de classe privée en utilisant un #préfixe de hachage .


Vous pouvez réaliser quelque chose de similaire en utilisant ES5 (juste pour simplifier l'explication), où vous pouvez simuler quelque chose comme des méthodes privées (dont JavaScript n'en a pas nativement).

Par exemple:

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

Dans ce qui précède, il exposera uniquement la initméthode de someObjqui peut être appelée en tant que someObj.init(), alors que votre someMethodne sera pas accessible en dehors de sa méthode parente.

Exemple:

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

le hachage est utilisé pour définir les champs de classe privée