126 votes

Structs en Javascript

Auparavant, lorsque je devais 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 méthodes plus efficaces pour simuler une structure en Javascript?

195voto

Markus Jarderot Points 33893

La seule différence entre les littéraux d'objet et les objets construits réside dans les propriétés héritées du prototype.

 var o = {
  'a': 3, 'b': 4,
  'doStuff': function() {
    alert(this.a + this.b);
  }
};
o.doStuff(); // displays: 7
 


Vous pourriez faire une usine de struct.

 function makeStruct(names) {
  var names = names.split(' ');
  var count = names.length;
  function constructor() {
    for (var i = 0; i < count; i++) {
      this[names[i]] = arguments[i];
    }
  }
  return constructor;
}

var Item = makeStruct("id speaker country");
var row = new Item(1, 'john', 'au');
alert(row.speaker); // displays: john
 

35voto

vava Points 11364

J'utilise toujours des littéraux d'objet

 {id: 1, speaker:"john", country: "au"}
 

23voto

Mario Points 2286

Le vrai problème est que les structures dans un langage sont supposées être des types de valeur et non des types de 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 remplir sa fonction, il évite toutefois qu'un programmeur veuille réellement bénéficier des avantages de l'utilisation de types de valeur (comme des primitives) au lieu d'un type de référence. Les types de valeur, par exemple, ne devraient pas causer de fuites de mémoire.

9voto

peter Points 3083

Je pense que la création d'une classe pour simuler les structs de type C, comme vous l'avez fait, est de la meilleure façon.

C'est un excellent moyen de regrouper les données et simplifie le passage de paramètres à des fonctions. Je voudrais aussi valoir qu'une classe JavaScript est de plus en plus comme un C++ struct qu'une classe C++, compte tenu de l' effort supplémentaire nécessaire pour simuler de vrais fonctionnalités orientées objet.

J'ai trouvé que d'essayer de faire du JavaScript plus comme une autre langue devient compliqué rapide, mais je suis entièrement d'appui à l'aide de JavaScript classes functionless des structures.

3voto

Robert Gould Points 29406

J'utilise des objets de style JSON pour des structures dumb (pas de fonctions membres).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X