2013-02-20 23 views
3

我自學並正在處理jQuery插件。

我發現了一個鍋爐板,用於迭代頁面上的元素,將$(this)分配給全局變量'obj'。

var obj = $(this); 

正如我在功能的結果,我可以使用$(obj).someFunc()obj.someFunc()都工作,但如果說實話,我真的不明白有什麼區別。

所以有這樣的問題,兩種方法的性能差異/好處是什麼,我應該使用哪種方法?

+3

如果你像上面那樣定義了obj,沒有理由使用'$(obj)',因爲它是多餘的。 '$($($($($(obj)))))' – 2013-02-20 19:04:57

+1

在一個jQuery插件中,'this'是jQuery對象,所以你重新包裝它兩次? – adeneo 2013-02-20 19:06:32

+1

取決於你是否已經在'this.each'裏面了 – 2013-02-20 19:07:22

回答

3

如果obj已經是一個jQuery對象,當你做var obj = $(this);是的話,那麼就沒有必要將它傳遞給jQuery的再次

$(obj)$($(this))相同,顯然是多餘的。

在看看jQuery's documentation [docs]也有助於瞭解您可以傳遞給jQuery什麼(化名$):

  • jQuery(selector [, context ])
  • jQuery(element)
  • jQuery(elementArray)
  • jQuery(object)
  • jQuery(jQuery object)
  • jQuery()

你看到傳遞一個jQuery對象是完全有效的,但它會克隆傳遞的對象,這可能不是你打算做什麼。


但是,它可能是值得指出的是一個jQuery插件方法this已經是一個jQuery對象,所以你不必將它傳遞給jQuery的要麼。

更多的信息在這裏:http://docs.jquery.com/Plugins/Authoring

+0

所以我可以忽略將$(this)賦值給obj並且僅僅引用'this' – KryptoniteDove 2013-02-20 19:10:44

+0

@Kryptonite:根據上下文,是的,但是你沒有提供更多的信息,所以我建議將是:嘗試它:) – 2013-02-20 19:11:29

+0

謝謝,優秀的答案。 – KryptoniteDove 2013-02-20 19:16:16

1

如果obj.someFunc()$(obj).someFunc()這兩個作品和someFunc是一個jQuery函數,那麼它意味着obj是一個jQuery對象。

在這種情況下,$(obj)只是一個多餘的呼叫。

0

區別非常簡單 - 在第一種情況下,您每次都調用$(),第一種情況爲$(obj).someFunc()。在第二種情況下,obj。someFunc(),你在呼喚它只是一次,並保存它導致一種叫做可變OBJ

0

var obj = $(this);

它就像您創建類的實例,你可以訪問和使用obj和它最好同時使用:

`$(obj)` 

是多餘的初始化是您創造另一個類的實例和相同對象分配給它。所以沒有使用或我說使用它的任何優勢。

相關問題