Vous voulez ajouter au "plugin" avec une portée/séparation privée de préoccupation. Cela peut être important pour la maintenance et l'extensibilité à long terme de votre application Web basée sur les plugins, que tout soit intégré dans un ou plusieurs fichiers.
Vous pouvez créer un champ privé et étendre une méthode jQuery.fn existante en fixant des méthodes directement ou en ajoutant au prototype de la méthode jQuery.fn.foo
(function ($) {
// instance method attached to the constructor function
$.fn.myCMS.classOne = function() {
};
// or "shared" method attached to prototype
$.fn.myCMS.prototype.classOne = function() {
};
})(jQuery);
Vous pouvez utiliser jQuery.extend(), qui dans ce cas est vraiment un "raccourci" pour ajouter une méthode à l'instance du constructeur comme la première méthode ci-dessus. Vous devez résumer tout ce que vous ajoutez dans un objet (généralement ce serait un objet anonyme):
$.extend($.fn.myCMS,{ classOne: function() { } });
Du point de vue de la conception si vous avez des « classes » qui ont besoin pour obtenir les mêmes variables Closured souvent ils devrait probablement faire partie de la même portée/fermeture de fonction, ou vous devriez exposer des getters et setters pour ces variables fermées (peut-être avec la convention _foo qui montre qu'elles sont destinées à être utilisées uniquement par votre code).
(function ($) {
var foo = "foo!";
// combined getter/setter
// could also check arguments.length
$.fn.myCMS._foo = function (value) {
if (typeof(value) != "undefined") {
foo = value;
} else {
return foo;
}
};
)(jQuery);
Si vous voulez être un hacker et vous devez obtenir à des variables Closured d'une portée différente, je crois que vous pouvez le faire en exécutant ces nouvelles méthodes, avec leur propre portée à l'aide .call() ou .Appliquer() de l'autre portée. Je peux essayer de trouver quelques exemples de la façon dont cela fonctionne, mais ce sera une bonne idée si vous faites vos propres recherches sur la façon dont la résolution de la portée fonctionne dans ce genre de scénarios. Je crois que vous pouvez "emprunter" la portée de la méthode originale "plugin" en utilisant une construction avec ($ .fn.myCMS) {} mais je ne suis pas 100% positif à ce sujet parce que je ne l'ai pas fait moi-même, seulement lire à ce sujet.