Question

Je suis relativement novice à la programmation orientée objet en JavaScript, et je ne suis pas sûr de la « meilleure » façon de définir et utiliser des objets en JavaScript. Je l'ai vu la façon de définir les objets et instancier une nouvelle instance « canonique », comme indiqué ci-dessous.

function myObjectType(property1, propterty2) {
    this.property1 = property1,
    this.property2 = property2
}
// now create a new instance
var myNewvariable = new myObjectType('value for property1', 'value for property2');

Mais j'ai vu d'autres façons de créer de nouvelles instances d'objets de cette manière:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
});

J'aime comment cette deuxième façon apparaît - le code est auto-documenté. Mais mes questions sont:

  1. Quel chemin est "meilleur"?

  2. Puis-je utiliser cette deuxième façon de instancier une variable d'un objet le type qui a été défini en utilisant la manière de définir « classique » du type d'objet avec celle implicite constructeur?

  3. Si je veux créer un tableau de ces objets, sont les autres considérations?

Merci à l'avance.

Était-ce utile?

La solution

Il est vraiment à goût. De cette façon:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
});

... est généralement mieux s'il y a plus de 2/3 arguments, car il facilite la lisibilité et la rend plus facile d'éviter le problème de l'argument en option (fn(null,null,null,123')).

Une autre considération est la performance. Le passage des arguments de façon classique sera plus rapide, mais ce gain de vitesse devient significative que dans des situations très sensibles à la performance.

  

Puis-je utiliser cette deuxième façon de instancier une variable d'un type d'objet qui a été défini en utilisant la voie « classique » de définir le type d'objet avec ce constructeur implicite?

Pas facilement. Si vous voulez instancier un constructeur en utilisant un hachage au lieu de simplement passer des arguments, et vous n'avez pas le contrôle de la source, alors vous pourriez « wrap » il:

var _constructor = SomeConstructorFunction;

SomeConstructorFunction = function(hash) {
    return new _constructor(hash.property1, hash.property2);
};

Je ne recommanderais pas vraiment jouer avec les API tiers juste pour le plaisir du style bien.

  

Si je veux créer un tableau de ces objets, sont là toute autre considération?

Quelle est la taille du tableau? Quel est le tableau pour exactement? Performance pourrait être utile d'envisager ...

Autres conseils

La meilleure façon de créer des objets javascript est cesser d'utiliser de nouveaux (au moins si vous êtes abonné au camp Crockford)

myObjectType = function(props) {
  // anything defined on props will be private due to the closure

  props.privateVar = "private";

  // anything defined on obj will be public
  obj = {};

  obj.testing = new function() {
    alert(props.privateVar);
  };

  return obj;
};
instance = myObjectType({prop1: "prop"});

// if we want inheritance, it just means starting with the base type instead of
// a new object
subType = function(props) {
  obj = myObjectType(props);
  obj.subTypeProperty = "hello.";

  return obj;
};

Page 52 Javascript: The Good Parts , je le recommande vivement : -)

1) Je dirais que la méthode 2 est beaucoup plus préféré, pour moi en tout cas. L'exemple avec 2 propriétés est pas différent, mais si vous vouliez faire ceci:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
    //Leaving several properties out, don't want them populated
    property8:    "This is the value for property 8"
    property9:    "This is the value for property 9"

});  

Pensez à combien de combinaisons de (ou surcharges garder une trace de nulls) vous auriez à avoir des propriétés de poignée que vous pouvez ou ne pas fournir à l'objet avec la première méthode. Ceci est un beaucoup plus extensible et flexible approche.

2) Juste permettre avec un constructeur vide, ce serait beaucoup plus propre pour l'instanciation.

3) Longueur / lisibilité, surtout avec plus de quelques objets. Regardez JSON, il est assez propre / lisible, encore une fois au moins pour moi, si vous aimez ce style, la création de tableaux de vos objets ressemble très similaires dans la méthode # 2.

Eh bien, la deuxième façon est joli et est utile dans le cas d'une « classe » qui a beaucoup d'options de configuration. Cependant, sachez que vous construisez en fait un autre objet dans le processus.

Je vous conseille de lire un code d'un ou d'une autre framework Javascript et trouver un style qui fait appel à vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top