Je suis curieux de savoir s'il existe des bonnes pratiques concernant JQuery lors de la construction de blocs de code encapsulés.JQuery JavaScript Design: fonction auto-exécutable ou littéral d'objet?
Généralement, lorsque je construis une page, j'aime encapsuler les fonctions utilisées dans cette page à l'intérieur d'un objet. Cela me permet une certaine encapsulation lors de la construction d'applications. Il n'y a rien que je déteste plus que de voir un fichier JavaScript avec un tas de cette
function doSomethingOnlyRelevantOnThisPage() {
// do some stuff
}
I cela fait désordre pour la conception, et n'encapsule pas vraiment fonctionnalité bien.
Généralement dans de nombreux cadres, il existe une norme qui est utilisée pour effectuer cette encapsulation.
En Mootools ils sont favorables à l'objet Notation littérales:
var Site = {
// properties and methods
}
En YUI ils favorisent l'auto exécution notation Fonction:
(function() { // properties and methods })()
La bonne chose à propos du deuxième exemple est qu'une fermeture est créée , vous permettant ainsi de définir des propriétés et des méthodes privées.
Ma question est la suivante: Est-ce que les aficionados de JQuery ont des bonnes pratiques pour créer ces structures proprement encapsulées? Quelle est la raison d'être de leur utilisation?
Je continue à voir ce modèle, mais j'aspire à un exemple plus complet - j'ai une page avec quelques éléments interactifs distincts et assez impliqués dont la logique devrait être encapsulée indépendamment les uns des autres. Des suggestions pour organiser le code dans ce genre de situation? Utiliser $ .fn.extend pour chaque pièce d'interface utilisateur différente semble contre-intuitif. –
Je ne recommanderais certainement pas d'étendre la fonction jquery à moins que vous n'écriviez un plugin - donc quelque chose qui est réutilisable dans de nombreuses pages. Dans mon cas, je diviserais ma fonctionnalité en ses parties distinctes, créant une fonction auto-exécutable pour contenir cette logique dans sa propre fermeture. Tout code partagé peut ensuite être attaché à jQuery lui-même via $ .extend, ce qui vous permettrait d'avoir des fonctions d'assistance qui ne nécessitent pas le contexte d'un élément pour fonctionner. –
Très bon article sur l'expression de fonction invoquée immédiatement (IIFE) http://benalman.com/news/2010/11/immediately-invoked-function-expression/ – stormwild