2012-02-06 3 views
0

Pourquoi la plupart des frameworks javascript utilisent des littéraux d'objet au lieu de constructeurs ou de constructeurs avec des prototypes? Est-ce que ce sera non standard si quelqu'un utilise des constructeurs avec des prototypes dans un nouveau framework. des littéraux d'objet sur les constructeurs avec des prototypes?Pourquoi la plupart des frameworks javascript utilisent des littéraux d'objet

+2

Ce sont deux choses complètement différentes ... Peut-être que certains exemples de code pourraient clarifier votre intention. – jondavidjohn

Répondre

1

Tout dépend du besoin du programme que vous écrivez et de la façon dont vous voulez maintenir la base de code.

Lorsque vous avez beaucoup d'objets instanciés avec des propriétés et des méthodes partagées, il peut être plus efficace dans le sens de la mémoire d'utiliser un constructeur et de remplir son prototype.

Lorsque le code est plus ou moins un singleton, il est probablement plus efficace de simplement créer un objet et de le remplir avec certaines méthodes.

Si vous souhaitez plus d'informations sur « modèles » et ce qu'ils peuvent signifier pour vous, vous pouvez consulter http://addyosmani.com/resources/essentialjsdesignpatterns/book/

Ou si vous le souhaitez un habitué (e) livre que je recommande http://shop.oreilly.com/product/9780596806767.do

+0

Existe-t-il un cadre utilisant l'approche prototype? –

+0

Il y a quelques cadres qui utilisent l'approche du prototype, le premier qui apparaît dans ma tête est (sans jeu de mots) "Prototype". – PM5544

1

Je suppose que vous voulez dire comment jQuery définit automatiquement les objets jQuery/$? réponse simple ... c'est plus simple comme ça. Pouvez-vous imaginer à quel point jQuery serait confus pour les nouveaux utilisateurs s'ils devaient inclure les deux lignes suivantes dans chaque page?

var jQuery = new jQuery(); 
var $ = jQuery; 
+0

Mais que se passe-t-il si ce code est dans jQuery? –

1

Je pense que vous parlez en utilisant {} vs new Object() et [] vs new Array().

La version littérale dans les deux cas est souvent plus rapide (bien sûr cela dépend du navigateur). Vous bénéficiez également de l'avantage de pouvoir définir des propriétés dans un objet ou des éléments dans un tableau dès le début. Cela rend le code plus léger et plus lisible.

var o = { 
    a: 1, 
    b: 2, 
    c: 3, 
    d: 4 
}; 
// vs. 
var o = new Object(); 
o.a = 1; 
o.b = 2; 
o.c = 3; 
o.d = 4; 

var a = [1, 2, 3, 4, 5]; 
// vs. 
var a = new Array(); 
a.push(1, 2, 3, 4, 5); 

Modifier: J'ai fait des tests de performance pour objects et arrays. Pour moi, les littéraux d'objets étaient en fait un peu plus lents dans Chrome. Les littéraux de tableau étaient beaucoup plus rapides, cependant. La syntaxe est toujours préférée, cependant.

0

Mais Si vous instanciez plusieurs fois l'objet, le prototype utilise moins de mémoire car vous ne recréez pas l'objet entier avec toutes ses méthodes. Le prototype est sympa car il vous permet de créer une nouvelle méthode à la volée et d'utiliser toutes les fonctions de cet objet. Syntactiquement c'est moche et je préfère l'objet littéral. Mais si vous construisez une application massive et la performance est un gros problème, alors le prototype est probablement la voie à suivre non?

Questions connexes