2011-01-29 16 views
6

¿Cómo administra el espacio de nombres para una biblioteca JavaScript personalizada depende de jQuery?Espacio de nombres de JavaScript con jQuery

¿Creas tu propio espacio de nombres, digamos foo y agregas tus objetos allí? p.ej. foo.myClass, foo.myFunction

¿O agrega sus objetos al espacio de nombres de jQuery? p.ej. jQuery.myClass, jQuery.myFunction

¿Cuál es la práctica más común y por qué?

+1

LOL no añadir sus propiedades a jQuerys espacio de nombres ... –

+1

Sumérgete en RequireJS para la gestión plugin de jQuery no;) – BGerrissen

Respuesta

4

Depende de lo que haga la biblioteca.

  • Si se extiende la funcionalidad de instancias de objetos jQuery, que tendría que utilizar jQuery.fn como se ha descrito muy bien por @David Titarenco en his answer.

  • Si está creando utilidades que deben verse como adiciones a las provistas en window.jQuery, entonces no veo ningún problema con el uso de ese espacio de nombres (siempre que tenga cuidado con el nombre).

  • Si es realmente su propia biblioteca independiente que es no destinado a ser visto como una extensión de jQuery, sin embargo, se basa en la funcionalidad de jQuery, entonces definitivamente utilizar su propio espacio de nombres.

7

This article discute escribir jQuery plugins/libraries con detalles insoportables.

qué no hacer:

(function($){ 

    $.fn.tooltip = function(options) { // THIS }; 
    $.fn.tooltipShow = function() { // IS }; 
    $.fn.tooltipHide = function() { // BAD }; 
    $.fn.tooltipUpdate = function(content) { // !!! }; 

})(jQuery); 

Qué hacer:

(function($){ 

    var methods = { 
    init : function(options) { // THIS }, 
    show : function() { // IS }, 
    hide : function() { // GOOD }, 
    update : function(content) { // !!! } 
    }; 

    $.fn.tooltip = function(method) { 

    // Method calling logic 
    if (methods[method]) { 
     return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } else if (typeof method === 'object' || ! method) { 
     return methods.init.apply(this, arguments); 
    } else { 
     $.error('Method ' + method + ' does not exist on jQuery.tooltip'); 
    }  

    }; 

})(jQuery); 

También escribió un año pasado blog post sobre varios métodos para namespacing en JavaScript (jQuery no relacionado).

+0

Su sitio ha sido secuestrado. Las páginas en dvt.name redirigen a lugares baaaaddd. –

Cuestiones relacionadas