Que fait le symbole «#» en JavaScript?
J'ai rencontré du code contenant le #
signe. A quoi cela sert? Le code ressemble à ceci:
class someObject{
#someMethod(){
//do something
}
}
Réponses
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
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 init
méthode de someObj
qui peut être appelée en tant que someObj.init()
, alors que votre someMethod
ne sera pas accessible en dehors de sa méthode parente.
Exemple:
someObj.init(); //works
someObj.someMethod(); //won't be accessible
le hachage est utilisé pour définir les champs de classe privée