0

Je souhaite créer un objet d'état. Ce qui peut avoir des valeurs comme pending, session, rejected, cancelled ...Quelle structure de données dans JS permettrait de choisir une valeur parmi des valeurs définies?

Je veux y accéder comme status.isSession();, status.isPending() ... etc`

mais je veux assigner comme ça status.toPending();, status.toSession();

De cette façon, il n'y a pas de place pour les fautes d'orthographe. Je pense que c'est une programmation dynamique.

+0

Pourquoi avez-vous besoin d'être accessible de cette façon? Ne pouvez-vous pas simplement avoir, par exemple, 'status.get()' et 'status.set (status.inprogress)'? – FCin

+0

"im ouvrir à status.session() si je ne dois pas définir la fonction séparément pour chaque statut" Que voulez-vous dire par là? La solution de @ FCin vous permettrait de réaliser ceci avec une seule fonction, vous prenez le nouveau statut et le passez comme argument à 'set', puis vous mettez cet argument à true et tous les autres objets à false. – Taurus

+0

J'ai mis à jour la question –

Répondre

2

Vous pouvez obtenir cela en JavaScript, mais cela ne fonctionnera qu'avec des doubles égaux.

Vous pouvez créer un objet avec le constructeur comme ceci:

function Status(value){ 
    this.session = true; 
    this.value = value; 
} 

Maintenant, si vous créez une instance de cet objet:

const status = new Status('session'); 

Effectivement status.session retourne vrai et status.value retournera 'session'

Maintenant, vous pouvez remplacer la méthode toString() de cet objet il retourne status.value

La raison en est que, lorsque vous essayez de comparer un objet vs primitif, le moteur va essayer de mettez-les dans un 'contexte de valeur' ​​et contractez votre objet à Chaîne en appelant l'opération .toString().

Effectivement cela produira:

const status = new Status('session'); 
console.log(status == 'session'); 

A vrai dans votre console.

Mais ceci est fortement déconseillé parce que c'est un hack et vous pourriez avoir des bugs étranges, alors je suggère de rester à l'écart.