Ce n' (function($) {})(jQuery); moyenne?
Je commence tout juste avec l'écriture de plugins jQuery. J'ai écrit trois petits plugins, mais j'ai été tout simplement copier la ligne dans tous mes plugins, sans vraiment savoir ce qu'il signifie. Quelqu'un peut-il m'en dire un peu plus sur ces? Peut-être une explication vous sera utile un jour, lors de l'écriture d'un cadre 🙂
À quoi ça sert? (Je sais qu'il s'étend jQuery, mais est-il autre chose intéressante à savoir à ce sujet)
(function($) {
})(jQuery);
Quelle est la différence entre les deux façons d'écrire un plugin:
De Type 1:
(function($) {
$.fn.jPluginName = {
},
$.fn.jPluginName.defaults = {
}
})(jQuery);
De Type 2:
(function($) {
$.jPluginName = {
}
})(jQuery);
Type 3:
(function($){
//Attach this new method to jQuery
$.fn.extend({
var defaults = {
}
var options = $.extend(defaults, options);
//This is where you write your plugin's name
pluginname: function() {
//Iterate over the current set of matched elements
return this.each(function() {
//code to be inserted here
});
}
});
})(jQuery);
Je pourrais être loin d'ici et peut-être que signifient tous la même chose. Je suis confus. Dans certains cas, ce ne semble pas être le travail dans un plugin que j'ai écrit à l'aide de Type 1. Jusqu'à présent, de Type 3 semble la plus élégante pour moi, mais j'aimerais connaître les autres.
- C'est l'heure du coucher ici, mais juste pour des démarreurs,
(function($) { })(jQuery);
encapsule le code de sorte que$
estjQuery
à l'intérieur fermeture, même si$
signifie quelque chose d'autre en dehors de cela, le plus souvent comme le résultat de$.noConflict()
par exemple. Cela vous assure que votre plugin fonctionne, si oui ou non$ === jQuery
🙂 - Sur
(function($) { })(jQuery)
vous avez dit : "je sais qu'il s'étend jQuery en quelque sorte [...]". Il est clair que vous ne savez pas depuis votre déclaration est 100% faux. Par la façon dont il peut être trompeur pour les futurs lecteurs. Jetez un oeil à ceci : stackoverflow.com/a/32550649/1636522. - S'étendant sur @NickCraver commentaires, jquery-ui-1.7.2.custom.min.js utilise ceci par exemple: jQuery.interface utilisateur||(function(c){var i=c.fn.supprimer,d=c.le navigateur.mozilla........})(jQuery). Je sais que c'est une ancienne version de jQuery UI avec code obsolète, mais le point est de montrer comment, dans ce cas, ils sont à l'aide de "c" au lieu de "$".
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, un bloc de code qui ressemble à
(function(){})()
est simplement une fonction qui est exécutée à la place. Nous allons décomposer un peu.La ligne 2 est une simple fonction, enveloppé dans une parenthèse pour dire à l'exécution de retour de la fonction à la portée parent, une fois qu'il est retourné, la fonction est exécutée à l'aide de la ligne 4, peut-être la lecture grâce à ces étapes vous permettront de
Vous pouvez voir que 1 est la déclaration, 2 est de retour de la fonction et la 3 est juste l'exécution de la fonction.
Un exemple de la façon dont il sera utilisé.
Comme pour les autres questions sur les plugins:
De Type 1: Ce n'est pas un en fait un plugin, c'est un objet passé comme une fonction, comme les plugins ont tendance à être des fonctions.
De Type 2: Ce n'est pas un plugin comme il ne s'étend pas à la
$.fn
objet. C'est juste une extenstion de la base jQuery, même si le résultat est le même. C'est, si vous voulez ajouter de la traversée des fonctions telles que toArray et ainsi de suite.Type 3: C'est la meilleure méthode pour ajouter un plugin, l'étendue prototype de jQuery prend un objet de tenir votre plugin nom et la fonction et l'ajoute à la plugin bibliothèque pour vous.
( function(){} )
: Qu'est-ce exactement? Je ne peux pas écrire justefunction(){}()
?Au niveau le plus fondamental, quelque chose de la forme
(function(){...})()
est un littéral de fonction qui est exécutée immédiatement. Ce que cela signifie, c'est que vous avez défini une fonction et que vous appelez immédiatement.Cette forme est utile pour se cacher de l'information et de l'encapsulation tout ce que vous définissez à l'intérieur de cette fonction reste locale à cette fonction et inaccessibles de l'extérieur du monde (sauf si vous l'exposer - généralement par l'intermédiaire d'un objet retourné littérale).
Une variante de cette forme de base est ce que vous voyez dans les plugins jQuery (ou dans ce module pattern en général). Donc:
Ce qui signifie que vous êtes de passage dans une référence à la réalité de
jQuery
objet, mais il est connu que$
dans le champ d'application de la fonction littérale.De Type 1 n'est pas vraiment un plugin. Vous êtes tout simplement l'attribution d'un objet littéral
jQuery.fn
. En général, vous attribuer une fonction àjQuery.fn
comme les plugins sont généralement que des fonctions.De Type 2 est similaire au Type 1; vous n'êtes pas vraiment la création d'un plugin ici. Vous êtes tout simplement l'ajout d'un objet littéral
jQuery.fn
.De Type 3 est un plugin, mais c'est pas la meilleure ou la plus simple de créer un.
De comprendre plus à ce sujet, jetez un oeil à cette question et réponse. Aussi, cette page va dans le détail sur la création de plugins.
Un peu d'aide:
JS:
Juste un petit plus à l'explication
Cette structure
(function() {})();
est appelé IIFE (Immédiatement appelé la Fonction de l'Expression), il sera exécuté immédiatement, lorsque l'interprète atteindre cette ligne. Ainsi, lorsque vous écrivez ces lignes:cela signifie, que l'interprète va appeler cette fonction immédiatement, et va passer
jQuery
comme paramètre, qui sera utilisé à l'intérieur de la fonction en tant que$
.De Type 3, dans l'ordre de travail devra ressembler à ceci:
Je ne suis pas sûr pourquoi quelqu'un serait d'utiliser étendre sur directement la définition de la propriété dans le jQuery, prototype, il est en train de faire exactement la même chose que dans plus d'opérations et le désordre.
En fait, cet exemple m'a aidé à comprendre ce qui ne
(function($) {})(jQuery);
veux dire?Considérez ceci:
Et maintenant:
jQuery
est une variable contenant l'objet jQuery.$
est un nom de variable comme les autres (a
,$b
,a$b
etc. et il n'a pas de signification particulière, comme en PHP).