2010-06-10 11 views
5

Hace poco vi este código en otro post (jQuery Set Cursor Position in Text Area)sintaxis extraño para extender jQuery

new function($) { 
    $.fn.setCursorPosition = function(pos) { 
     // function body omitted, not relevant to question 
    } 
} (jQuery); 

Después de demasiado tiempo tratando de entender lo que estaba haciendo por fin me di cuenta de que es sólo la creación de una nueva función con un parámetro $ y luego invocándolo con jQuery como el valor del parámetro.

Así que en realidad, es sólo hacer esto:

jQuery.fn.setCursorPosition = function(pos) { 
    // function body omitted, not relevant to question 
} 

¿Cuál es la razón de la versión original, más confuso?

Respuesta

5

Para bloques grandes de código usando $ es mucho mejor que jQuery.

Al usar múltiples bibliotecas, las personas a menudo deshabilitarán el atajo $ porque muchas bibliotecas lo usan. Escribir el código de esa manera les permite a los usuarios escribir código con el acceso directo sin preocuparse por el conflicto con otras bibliotecas. Y dado que este sitio se aplica a una gran audiencia, usar ese código es más probable que funcione si el usuario tiene o no $ activado.

+0

También parece ser una práctica muy utilizada comúnmente en los plugins jQuery para la prevención de conflictos. –

0
new function($) { 
    $.fn.setCursorPosition = function(pos) { 
     // function body omitted, not relevant to question 

     // You are safe to always use $ here 
    } 
} (jQuery); 

y

jQuery.fn.setCursorPosition = function(pos) { 
    // function body omitted, not relevant to question 

    // you have to make sure $ was not overwritten before using it here.. 
} 
3

Desde otras bibliotecas de JavaScript pueden usar $ a nivel mundial, la biblioteca debe hacer referencia explícita jQuery para evitar conflictos. Al crear una función con el parámetro $, puede vincular el objeto jQuery a esa variable dentro del alcance de esa función. Esto le brinda la seguridad de especificar explícitamente el objeto jQuery Y la conveniencia de usar la abreviatura $.

Este es el modelo que estoy acostumbrado a ver:

(function($) { 
    // code using $ goes here 
})(jQuery);