Auparavant, lorsque j'avais besoin de stocker un certain nombre de variables liées, je créais une classe.
function Item(id, speaker, country) {
this.id = id;
this.speaker = spkr;
this.country = country;
}
var myItems = [
new Item(1, 'john', 'au'),
new Item(2, 'mary', 'us')
];
Mais je me demande si c'est une bonne pratique. Existe-t-il d'autres moyens plus efficaces pour simuler une structure en Javascript?
javascript
struct
nickf
la source
la source
J'utilise toujours des littéraux d'objet
la source
new READABLE_PART(ignore everything in here)
devient très scannable et auto-documenté, par opposition à{read: "ignore", everything: "ignore", in: "ignore", here: "ignore"} // and then come up with READABLE_PART
dans votre tête. La première version est lisible en paginant rapidement. Le second, vous refactorisez en structures simplement pour comprendre.Le vrai problème est que les structures d'un langage sont supposées être des types valeur et non des types référence. Les réponses proposées suggèrent d'utiliser des objets (qui sont des types de référence) à la place des structures. Bien que cela puisse servir son objectif, cela évite le fait qu'un programmeur voudrait réellement les avantages de l'utilisation de types valeur (comme une primitive) au lieu d'un type référence. Les types valeur, pour un, ne devraient pas provoquer de fuites de mémoire.
la source
Je pense que créer une classe pour simuler des structures de type C, comme vous l'avez fait, est le meilleur moyen.
C'est un excellent moyen de regrouper les données associées et de simplifier la transmission de paramètres aux fonctions. Je dirais également qu'une classe JavaScript ressemble plus à une structure C ++ qu'à une classe C ++, compte tenu de l' effort supplémentaire nécessaire pour simuler des fonctionnalités orientées objet réelles.
J'ai constaté qu'essayer de rendre JavaScript plus semblable à un autre langage se compliquait rapidement, mais je supporte pleinement l'utilisation des classes JavaScript comme structures sans fonction.
la source
Suite à la réponse de Markus , dans les nouvelles versions de JS (ES6 je pense), vous pouvez créer une usine `` struct '' plus simplement en utilisant les fonctions de flèche et le paramètre de repos comme ceci:
Le résultat de l'exécution de ceci est:
Vous pouvez le faire ressembler au namedtuple de Python:
Et les résultats:
la source
J'utilise des objets de style JSON pour les structures stupides (pas de fonctions membres).
la source
J'ai créé une petite bibliothèque pour définir struct si vous travaillez avec la compatibilité ES6.
C'est un analyseur JKT, vous pouvez extraire le référentiel du projet ici Analyseur JKT
Pour un exemple, vous pouvez créer votre structure comme ceci
la source
C'est plus de travail à mettre en place, mais si la maintenabilité bat un effort ponctuel, cela peut être votre cas.
Avantages:
la source