J'ai besoin de différents constructeurs pour mes instances. Quel est le modèle courant pour cela?
javascript
design-patterns
oop
codéholique
la source
la source
function ({ oneThing = 7, otherThing = defaultValue } = {}) { }
. Le supplément que= {}
j'ai mis là-dedans est une autre astuce que j'ai apprise récemment, au cas où vous voudriez que l'utilisateur ne passe aucun objet et utilise toutes les valeurs par défaut.return new this();
,return new this.otherStaticFactoryFunction();
, etc.)!Réponses:
JavaScript n'a pas de surcharge de fonctions, y compris pour les méthodes ou les constructeurs.
Si vous souhaitez qu'une fonction se comporte différemment en fonction du nombre et des types de paramètres que vous lui passez, vous devrez les renifler manuellement. JavaScript appellera volontiers une fonction avec plus ou moins que le nombre d'arguments déclaré.
Vous pouvez également accéder
arguments
sous forme de tableau pour obtenir d'autres arguments transmis.Si vous avez besoin d'arguments plus complexes, il peut être judicieux de les placer tout ou partie dans une recherche d'objet:
Python montre comment les arguments par défaut et nommés peuvent être utilisés pour couvrir la plupart des cas d'utilisation d'une manière plus pratique et plus élégante que la surcharge de fonctions. JavaScript, pas tellement.
la source
MyObj({foo: "foo"})
plusMyObj({bar: "bar"})
. MyObj a deux constructeurs - mais les deux prennent un argument, qui est une chaîne :-)Comment trouvez-vous celui-ci?
la source
vous pouvez utiliser une classe avec des méthodes statiques qui retournent une instance de cette classe
avec ce modèle, vous pouvez créer plusieurs constructeurs
la source
Je n'avais pas envie de le faire à la main comme dans la réponse de bobince, alors j'ai complètement déchiré le modèle d'options de plugin de jQuery.
Voici le constructeur:
Voici différentes méthodes d'instanciation:
Et voici ce que cela a fait:
la source
En allant plus loin avec la réponse d'eruciform, vous pouvez enchaîner votre
new
appel dans votreinit
méthode.la source
new Foo()
et appelerinit
ensemble parce que je ne pouvais pas accéder aux propriétés des objets. Je devais courirvar a = new Foo(); a.init_1('constructor 1');
Parfois, les valeurs par défaut des paramètres sont suffisantes pour plusieurs constructeurs. Et quand cela ne suffit pas, j'essaie d'envelopper la plupart des fonctionnalités du constructeur dans une fonction init (other-params) qui est appelée par la suite. Pensez également à utiliser le concept d'usine pour créer un objet capable de créer efficacement les autres objets de votre choix.
http://en.wikipedia.org/w/index.php?title=Factory_method_pattern&oldid=363482142#Javascript
la source
Vous pouvez utiliser des objets de destruction comme paramètres de constructeur dans ES6
Voici le modèle:
Vous ne pouvez pas avoir plusieurs constructeurs, mais vous pouvez utiliser la déstructuration et les valeurs par défaut pour faire ce que vous voulez.
Et vous pouvez le faire si vous souhaitez prendre en charge un constructeur «sans paramètre».
la source
Utilisations:
la source
C'est l'exemple donné pour plusieurs constructeurs en Programmation en HTML5 avec JavaScript et CSS3 - Réf d'examen .
la source