userei la prima opzione perché:
Non ha effetti collaterali negativi.
Ecco dove ti sbagli. Se stai lavorando con diverse librerie, rischi di sovrascrivere qualcuno e qualcun'altroFunc(), probabilmente rompendo qualsiasi cosa stessero tentando di fare per te. Un modo più sicuro sarebbe quello di avvolgere una chiusura attorno al tuo codice.
(function(){
$.fn.myplugin = function() {
var somevar = this;
someFunc(somevar);
};
function someFunc() {/*doSomethin'*/};
/* Do whatever other things you need someFunc/myplugin for */
})();
In questo modo someFunc è protetto dallo spazio dei nomi globale.
In alternativa ciò che si potrebbe desiderare di fare è esporre il metodo dell'oggetto al mondo esterno. Prendete esempio seguente:
$.fn.dog = function() {
this.bark = function() {alert("Woof");};
return this;
};
var $max = new $('#myDogMax').dog();
$max.bark();
questo mantiene la funzione nel contesto del vostro oggetto, ma permette di accedervi in modo pulito dall'esterno. Anche se questo di solito significa che il metodo è in qualche modo correlato all'oggetto. Non avrebbe molto senso scrivere una funzione di bark() globalmente, dato che di solito sono i cani che lo fanno e non le finestre del browser.
ovviamente il problema con il primo è che se lo si utilizza in un nuovo progetto, è necessario assicurarsi di aver già definito 'someFunc()', il che significa che renderlo come un plugin non lo farà raggiungere molto. certamente? –
@JoshStevenson Ho assunto che l'intera operazione andasse in un singolo file, ad es. 'myplugin.jquery.js' nel qual caso non importa, giusto? –
Come nota a margine, il tuo plugin dovrebbe restituire il set di elementi corrispondenti per mantenere il jQuery chaining –