我看了一下這個主題:How to create a jQuery plugin with methods?,雖然有很多關於多功能插件的解決方案,但我很感興趣的是如果可以使用一個對象,這樣就不會有像$("selector").plugin().dostuff()
這樣難看的構造,而是可以更像這樣使用它:$("selector").plugin.dostuff()
,即'插件'是一個對象,不是函數。您可以使用JS對象作爲JQuery插件的接口嗎?
我可以寫這樣的插件:
$.fn.plugin = {
dostuff: function() {},
domorestuff: function(){}
};
但隨後的內部函數將不能訪問到調用它擺在首位的jQuery對象,如this
返回插件對象。有什麼方法可以構建一個基於JQuery的對象的插件嗎?
好吧,你已經說服我。但是,你能解釋爲什麼這個''在你的例子中起作用,而不是在我的例子中? – Miguel
@Miguel:因爲JavaScript中的this主要由函數的調用方式來設置:如果通過對象屬性調用函數,則在調用中,this指的是該對象(通常)。所以'foo.bar();'用'this'調用'bar'等於'foo'。 '$(「selector」)。plugin();''''用'this調用'plugin'等於'$(「selector」)'返回的jQuery對象。但''(「selector」)。plugin.method();''''''''this''調用''方法'等於'plugin',而不是jQuery對象;對jQuery對象的引用已經丟失。 –
但在你的情況不'方法[方法] .apply(this,args);'涉及調用對象的方法「方法」?那麼爲什麼'this'沒有設置爲「方法」? – Miguel