2010-06-10 84 views
5

奇怪的语法我最近看到这个代码在另一篇文章(jQuery Set Cursor Position in Text Area延长jQuery的

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

后过长试图理解它在做什么,我终于想通了,它只是创造一个新的功能与参数$,然后用jQuery作为参数值调用它。

因此,实际上,它只是这样做:

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

什么是原创,更混乱的版本的原因是什么?

回答

5

对于使用$代码大块比jQuery好得多。

使用多个库时,人们通常会禁用$快捷方式,因为许多库都使用它。编写这样的代码允许用户使用快捷方式编写代码,而不用担心与其他库冲突。由于本网站适用于广泛的受众,因此无论用户是否启用$,使用该代码最有可能起作用。

+0

这也似乎是在jQuery插件,以防止冲突的一个很常用的做法。 – 2010-06-10 05:37:56

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

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

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

由于其他JavaScript库可以使用$全球范围内,你的图书馆应该明确地引用jQuery以防止冲突。通过创建一个带参数$的函数,可以将jQuery对象绑定到该函数范围内的该变量。这使您明确指定jQuery对象的安全性以及使用$速记的便利性。

这是我看惯了的模式:

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