2010-06-10 86 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);