0

Donc, je ne peux pas trouver de réponse juste à ce sujet, seulement de vagues exemples de variations multiples où des déclarations de plugin/méthode similaires sont utilisées. Je sais qu'en disant

$.fn.myPlugin 

Je définir une méthode plug-in public qui peut être exécutée sur un objet jQuery valide où le fn désigne le prototype. Ma question est donc, en définissant une méthode, soit à l'intérieur de mon plugin principal comme si

$.fn.myPlugin.methodName 

ou à l'extérieur de mon plugin comme si

$.something.methodName //where 'something' is in place of 'fn' 

cela affecte-t étant une méthode privée/publique? et si chacun est un type différent de déclaration, quelle est la différence. La trame de fond de la raison pour laquelle je voudrais savoir, pour donner un contexte à la situation, est que je veux définir un plugin principal qui peut être appelé et qui a fonctionné normalement, cependant si l'utilisateur final veut redéfinir une méthode J'ai permis d'être public alors ils peuvent le faire. Si j'ai des méthodes que je ne veux pas que l'utilisateur redéfinisse mais fournisse à la place des rappels afin qu'ils puissent s'y accrocher, alors je veux rendre cette méthode privée.

+0

Si vous configurez quoi que ce soit sur le '.whatever' $, il est ... –

+0

publique alors que je ferais alors' $ .fn.myPlugin.privateMethod' de déclarer une méthode privée pour myPlugin? – Turk

+0

Non. Vous ne pouvez pas créer de méthodes privées dans une portée publique comme celle-ci. Regardez la réponse fournie par @NiettheDarkAbsol ci-dessous pour voir comment le faire. – Archer

Répondre

2

Tout ce qui est défini sur $.whatever sera public et pourra donc être modifié par d'autres développeurs.

Si vous souhaitez des méthodes privées, vous devez créer une fermeture.

(function() { 
    function init(jqObj) { ... } // do magic here 
    $.fn.myPlugin = function() { init(this); } // avoid exposing core method 
    $.fn.myPlugin.publicMethod = function() { ... } 
    function privateMethod() { ... } 
})(); 
+0

ahhh d'accord, cela a du sens. J'ai la fermeture étant définie par '(function ($) {} (jQuery));' Je vois maintenant que les méthodes privées sont juste des fonctions localement étendues. C'est le morceau qui me manquait, cependant, utilisez-vous 'function (init)' en tant que fonction privée du plugin principal pour éviter que quelqu'un ne l'écrase? – Turk