2010-08-27 24 views
3

我已經使用jQuery編碼了大約2年,但我從來沒有在插件中完成它。我試圖改變這一點。我找到了幾個解釋如何創建插件的網站,並瞭解基礎知識。jQuery插件創作:「this」關鍵字的解釋?

我不明白的部分是使用this關鍵字。這裏有一個簡單的插件,例如:

(function($){ 
    $.fn.myPlugin = function(options) 
    { 
    // Do whatever 
    return this.each(function(){ 
     element = $(this); 
    }); 
    } 
    $.fn.myPlugin.init = function() 
    { 
    // Initiate plugin 
    } 
})(jQuery); 

在我的代碼的第5行,我有this.each。在這種情況下,this關鍵字引用選擇器中的所有元素。下面的行使用$(this)這是當前元素,就像我在.click(function(){$(this).hide();})中做的那樣。

現在,在OO邏輯中,通常我們有一個this關鍵字來引用內部函數或屬性。如果在$.fn.myPlugin我想打電話給$.fn.myPlugin.init(),我希望能夠處理類似this.init()的事情,但它似乎沒有工作。

此外,我期待能夠以類似的方式定義類屬性,如this.myVariable = "my value"

所以,如果任何人都可以解釋我想要了解jQuery的插件概念,或者指出我在正確的方向與相關的鏈接,我會很感激的幫助!如果我的解釋不夠清楚,讓我知道,我會盡力讓它變得更好,但現在我的想法有些模糊。 ;)

回答

2

在進入.each()之前,this實際上是包含匹配DOM元素集的jQuery對象。

如果您想以這種方式調用該函數,您需要在它添加的範圍內調用它。 $.fn.myPlugin

this.myPlugin.init(); 

或內部的每個這樣的:

$(this).myPlugin.init(); 

或者直接像這樣:

$.fn.myPlugin.init(); 
+0

this.myPlugin.init()和$ .fn.myPlugin.init()都給我一個未定義的錯誤... – Gabriel 2010-08-27 18:04:01

+0

@加布裏埃爾 - 取決於你在哪裏,當你打電話給他們。試試這個例子:http://jsfiddle.net/bRfdE/你會得到3種不同的調用方式。所以問題將出現在何時何地,你會怎麼做?如果您期望'this'引用DOM元素或jQuery對象,則需要做一些小改動。 – user113716 2010-08-27 18:16:20

+0

你是絕對正確的,對不起,我的電話是在bind()中的一個匿名函數。這給我帶來了另一個問題,但我會想出一些我猜...似乎所有對我的項目的引用丟失,當我在那裏... – Gabriel 2010-08-27 18:52:59