2011-09-24 15 views
15

Capisco il concetto di estendere jquery.fn per posizionare le funzioni personalizzate sulla catena di prototipi di un oggetto jquery, ma nel mio caso alcuni dei miei programmi di utilità non devono essere collegati a un selettore . Sto fondamentalmente cercando un metodo statico. Quindi volevo sapere qualsivoglia trabocchetto di scrittura di metodi statici direttamente sull'oggetto jQuery come metodi utili.Scrivere metodi jquery static util

Esempio:

jquery.myMethod = function(arg){ 
    ...... 
} 

$.myMethod("blabla"); 

Grazie

risposta

15

Come sembra rendersi conto, è una buona idea non scaricare tutte le funzioni di utilità nello spazio dei nomi globale. Minore è l'impatto sul namespace globale, meglio è. Se si dispone già di jQuery, quindi le scelte di dove metterli sono:

  1. come nuovi metodi sull'oggetto jQuery come: jQuery.myUtil1(), jQuery.myUtil2().
  2. Come nuovi metodi sotto un oggetto sull'oggetto jQuery come: jQuery.jfUtils.myUtil1(), jQuery.jfUtils.myUtil2().
  3. Come nuovi metodi su un nuovo oggetto globale (niente a che fare con jQuery) come: jfUtils.myUtil1(), jfUtils.myUtil2().

L'opzione 2) mi sembra migliore dell'opzione 1) perché si riduce la possibilità di scontrarsi con altre funzioni jQuery sebbene si aggiunga una ricerca aggiuntiva per ogni chiamata di funzione.

L'opzione 3) mi sembra perfettamente accettabile in quanto aggiunge un solo nuovo elemento al namespace globale, fintanto che il nome è ragionevolmente unico, si dovrebbe essere OK.

Quindi, penso che potresti andare con l'opzione 2) o con l'opzione 3). L'opzione 2) potrebbe essere un po 'più sicura perché si conosce l'estensione generale di ciò che si trova in quello spazio dei nomi, ma entrambi possono funzionare.

+0

Grazie a jfriend00 è davvero una questione di preferenza per i suoni di esso, oltre a aggiungerlo direttamente all'oggetto jquery devi essere più attento. Ecco perché ho prima controllato il file jquery.js per assicurarmi che non ci fossero metodi con lo stesso nome che avrei aggiunto. Sembra solo più pulito per aggiungerli direttamente al nome jquery. Ma vedo anche la protezione extra di aggiungere un altro oggetto direttamente allo spazio dei nomi jquery per aggiungere i tuoi metodi. – Chapsterj

+0

+1 Definitivamente andare con l'opzione 2. Non è poi così male scriverlo come $ .util.myMethod() e la protezione salverà il mal di testa lungo la linea. Raggruppare funzioni comuni in namespace è una buona pratica in tutte le lingue. L'eccezione è a meno che non decidiate di legare alla catena di manipolazione DOM di jQuery. –

5

Non aggiungere metodi statici per jQuery. Non ottieni nulla cercando di farlo. Il punto di estensione di jQuery è che gli oggetti jQuery trovati con stringhe di query avranno dei metodi su di essi. Stai semplicemente creando una funzione globale, quindi crea solo un nuovo oggetto di livello superiore per le tue funzioni.

+4

La tua affermazione non è del tutto vero. Mettere i metodi sull'oggetto jQuery non aggiunge alcun nuovo inquinamento globale nello spazio dei nomi o conflitti nello spazio dei nomi globale e come tale può essere migliore del dumping di un sacco di nuove funzioni nello spazio dei nomi globale. Dovresti assicurarti di non entrare in conflitto con altre funzioni di jQuery, ma non correrai alcun rischio di scontrarti con qualcos'altro a livello globale. – jfriend00

+2

Non vedo come uno sia migliore dell'altro: o aggiungi un nome allo spazio dei nomi globale, e spera che non entri in collisione con qualcosa lì, o aggiungerai un nuovo nome all'oggetto jQuery e speri che non ti piaccia si scontrano con qualcosa lì. È lo stesso problema in entrambi i casi, ma almeno aggiungendo un nome allo spazio dei nomi globale in cui si possiede il proprio nome di livello superiore e non confondendo il problema rendendolo simile a qualcosa che fornisce jQuery. –

+0

Come potete vedere nella mia risposta, ho sottolineato i pro/contro di ciascuno. Probabilmente dipende da quale spazio dei nomi pensi sia meglio compreso e meno probabile che abbia un conflitto - lo spazio dei nomi dell'oggetto jQuery o il namespace globale - nessuna singola risposta corretta. O può funzionare. Nel mio commento sottolineo che si potrebbe considerare l'aggiunta di funzioni di utilità jQuery all'oggetto jQuery anche se non sono metodi di oggetti jQuery. Ci sono altri motivi per farlo. – jfriend00