2011-12-29 90 views
2

What't的書寫jQuery函數是這樣的地步:jquery函數和常規javascript函數之間的區別?

(function($) { 
    $.fn.simple_hide_function = function() { 
    var $t = this; 
    $t.hide(); 
    }; 
})(jQuery); 

$(window).load(function() { 
$('#myId').simple_hide_function(); 
}); 

爲什麼不去做這樣的:

function simple_hide_function(id){ 
id.hide(); 
}; 

$(window).load(function() { 
var my_id = $('#my_id'); 
simple_hide_function(my_id); 
}); 

問題補充:

難道是做任何的問題這個?

function simple_hide_function(id){ 
id.hide(); 
}; 

$(window).load(function() { 
var my_id1 = $('#my_id1'), 
my_id2 = $('#my_id2'), 
my_id3 = $('#my_id3'); 
simple_hide_function(my_id1); 
simple_hide_function(my_id2); 
simple_hide_function(my_id3); 
}); 
+2

對於附加的問題:如果你不介意你的代碼很難閱讀,重用和維護,爲什麼不。這被稱爲「不好的做法」。當你成爲一個更好更好的開發者時,你會意識到你不能做那樣的事情。 – kapa 2011-12-29 10:54:58

回答

3

在插件版本中,您正在創建一個新函數並將其附加到jQuery對象。通過讓你的函數成爲對象的成員,你可以利用諸如jQuery鏈接之類的東西,其中多個函數在同一個對象上被調用。

在第二個版本中,您將在全局範圍內創建一個函數並將其傳遞給一個jQuery對象。這污染了全局命名空間(現在你的函數在任何地方都是可見的),它並不完全符合jQuery原理。

但是,正如您發現的那樣,沒有功能差異。兩者都會執行得很好。

+0

感謝Interrobang,我想我理解你的意思。只是爲了支持,像secound版本一樣沒有錯? – Hakan 2011-12-29 11:03:24

+0

那麼,用你的第二個版本,你不能''('#my_id1,#my_id2,#my_id3')。simple_hide_function();'就像你可以使用插件版本一樣。如果你打算用jQuery來操作,你應該使用jQuery插件,這就是它們的全部要點。 – Interrobang 2011-12-29 11:07:22

0

我認爲最主要的想法是,你不會混淆全局命名空間。在第二個示例中,simple_hide_function屬於該窗口,可能會導致名稱衝突,但在第一個示例中它是一個局部變量。

+0

謝謝jkeesh!我添加了一個問題。這會「干擾」任何事情嗎? – Hakan 2011-12-29 10:55:24

+0

第二個例子也混亂了全局命名空間,因爲'simple_hide_function' stil綁定到窗口。上面部分答案解釋了使用jQuery插件的其他好處。 – jkeesh 2011-12-29 22:03:16

相關問題