JavaScript - les Avantages du littéral d'objet
J'ai lu que, plutôt que de simplement écrire un tas de fonctions, je dois utiliser un objet littéral.
Quelqu'un peut m'expliquer quels sont les avantages de l'objet littéral sont avec des exemples, parce que je ne comprends pas jusqu'à présent.
Grâce
Vous devez vous connecter pour publier un commentaire.
Que Russ Cam dit, vous éviter de polluer l'espace de noms global, ce qui est très important dans ces jours de la combinaison de scripts à partir d'emplacements multiples (TinyMCE, etc.).
Comme Alex Sexton a dit, il fait du bon code de l'organisation en tant que bien.
Si vous utilisez cette technique, je vous conseille d'utiliser le motif de module. Cette utilise encore l'objet de littéraux, mais comme valeur de retour d'une étude sur la portée de la fonction:
Usage externe:
La détermination de la portée de la fonction est enroulé autour de l'ensemble de vos fonctions, et ensuite vous l'appelez immédiatement et stocker sa valeur de retour. Avantages:
{name: function() { ... }}
, l'ensemble de vos fonctions sont anonymes, même si les propriétés de référencement eux ont des noms.) Les noms d'outils d'aide à vous aider, de montrer les piles d'appels dans un débogueur, pour vous dire ce que la fonction a déclenché une exception. (2015 mise à Jour: La dernière JavaScript spécification ECMAScript 6e édition, définit un grand nombre de façons le moteur JavaScript doit déduire un nom de la fonction. Un de ceux est lorsque la fonction est affectée à une propriété que dans notre{name: function() { ... }}
exemple. De sorte que les moteurs de mettre en œuvre ES6, cette raison va aller loin.)internalSomething
ci-dessus). Aucun autre code sur la page peut appeler ces fonctions; ils sont vraiment privé. Seulement ceux que vous avez à l'exportation à la fin, dans l'instruction de retour, sont visibles de l'extérieur de la portée de la fonction.Exemple de retour des fonctions différentes:
foo
dansfunction foo
), est étendue à l'ensemble du champ où elle est déclarée, y compris au sein de la fonction elle-même, de sortefoo
peut s'appeler lui-même via le symbolefoo
, pas besoin d'assigner la fonction de référence à quoi que ce soit (à ce point).À l'aide d'un objet littéral (un.k.un. objet littéral modèle) ne sera pas polluer l'espace de noms global aussi sévèrement que l'aide de nombreuses fonctions déclarées à l'échelle mondiale, et permet également d'organiser le code dans une logique de mode
Par exemple, cet objet littéral
par rapport à
permettra de créer une seule propriété sur l'objet global par rapport à trois. Vous pouvez facilement utiliser les fonctions comme
Rebecca Murphey a fait un discours sur l'Objet des Littéraux de cette année jQuery Conférence. Une des meilleures raisons de les utiliser est tout simplement un bon code de l'organisation.
Ici est de Rebecca écriture sur l'Objet Littéral Modèle : http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/
J'ai toujours utilisé des littéraux d'objet parce qu'ils sont un moyen évident d'organiser le code. C'est pourquoi je n'aime pas le prototype, c'est trop salissant.
Les fonctions ne font pas polute de l'espace de nom comme quelqu'un l'a mentionné ci-dessus, pas plus que les littéraux d'objet.
Vous pouvez facilement écrire un littéral comme
qui serait polute par la création d'un grand nombre d'objets globaux de la même la même les fonctions. de la même façon que vous pouvez faire:
qui ne serait pas de créer ces objets globaux (tout est un objet en JS)
de cette façon, vous n'avez toujours pas créer de charges des objets globaux.
À mon esprit d'objets littéraux ont deux avantages. Ils sont utilisés par de nombreux plugins tels que jQuery, donc les gens sont familier et ils sont faciles à lire. Ce qui les rend faciles à transmettre les données dans un plugin. Il est facile de créer à la fois public et privé méthodes....
Ils peuvent être lent si, comme à chaque fois que vous créez une instance de l'objet de toutes ses méthodes sont dupliqués. C'est ma compréhension que ce n'est pas le cas avec le prototype que vous avez une copie de méthodes et de nouveaux objets tout simplement référence au prototype.
J'ai peut-être tort, bien sûr...
_myPrivate
pour les particuliers au lieu de cela, mais serait heureux si quelqu'un peut me fournir un. Plus sur le prototype, l'héritage, mélanger ins ici: stackoverflow.com/a/16063711/1641941