74 votes

Javascript: Motif de Module vs Constructeur/Prototype de modèle?

Je voudrais savoir si le motif de module ou d'un Constructeur/protoType est plus applicable à mon travail.

Fondamentalement, je suis à l'aide de javascript discret -- le document HTML a une référence à l' .fichier js.

Ma compréhension du motif de module:

  • appeler une méthode INIT (qui est en fait une méthode publique, je peux créer et de retour en utilisant le motif de module)
  • Dans la méthode INIT, affecter tous les événements de clic etc.

Cela sonne comme le parfait modèle pour ma situation, que je n'ai pas besoin de créer des Objets et des hiérarchies d'héritage, etc.

Ma compréhension du Constructeur/Prototype de modèle:

  • pour la création d'objets
  • pour l'utilisation de l'héritage (c'est à dire les sous-types d'un supertype)

Suis-je correct, que pour fournir javascript discret, le motif de module est idéal?

68voto

bobince Points 270740

Constructeur-les fonctions et les prototypes sont l'une des façons raisonnables pour mettre en œuvre les classes et les instances. Ils n'ont pas tout à fait correspondre à ce modèle, de sorte que vous devez généralement choisir un système ou une méthode d'assistance à mettre en œuvre des classes en termes de prototypes. (Un peu de fond sur les classes en JS.)

Le module de modèle est généralement utilisé pour namespacing, où vous aurez une seule instance statuant comme un magasin de groupe de fonctions et d'objets. C'est un autre cas d'utilisation à partir de ce que le prototypage est bon pour. Ils ne sont pas vraiment en concurrence les uns avec les autres; vous pouvez tout à fait heureux d'utiliser les deux ensemble (par exemple mettre un constructeur de fonction à l'intérieur d'un module et dire new MyNamespace.MyModule.MyClass(arguments)).

13voto

Yann VR Points 97

Motif de Module est de loin plus facile et plus élégant que le prototype. Cependant, penser "mobile first". Il n'est pas un motif pour les moyens/grands objets, car l'initialisation doit analyser l'ensemble du bloc avant de commencer. Les multiples fermetures également créer des dépendances circulaires que le garbage collector n'est pas libre (en particulier IE), il en résulte une lourde empreinte mémoire pas libéré jusqu'à ce que la fenêtre (ou onglet) est fermé - vérifier chrome gestionnaire des tâches de comparer Le temps de chargement est inversement proportionnelle à la taille de l'objet à l'aide du module de modèle, ce n'est pas le cas pour les prototypes de l'héritage. Les déclarations ci-dessus sont vérifiées par le biais de multiples critères de référence comme celui-ci: http://jsperf.com/prototypal-performance/54

Comme on le voit dans le dernier test. Les petits objets sont mieux être initialisé de la plaine de l'objet ( sans ces modèles). Il est adapté pour des objets ne nécessitant pas de fermeture ni d'héritage. Il est préférable d'évaluer si vous avez besoin même de ces modèles.

5voto

Chris Nash Points 545

Vous pouvez essayer de le Pliage, voici un lien: Javascript Pliage

J'ai aussi laissé une réponse à une question similaire, qui montre comment utiliser le Schéma de Pliage:

Exemple Simple de Modèle Pliant

4voto

user1662008 Points 41

Prototype de modèle nous permet d'étendre les fonctionnalités et il n'y a qu'une seule instance de fonctions en mémoire quel que soit le nombre d'objets. Dans le Module patter, chaque objet crée une nouvelle instance de fonctions dans la mémoire, mais il fournit avec la notion de privé/public, les variables et les aide à encapsuler les variables et les fonctions.

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