讓我們假設,我們有以下的jQuery插件(他們每個人在不同的文件):命名空間的jQuery插件
$.fn.foo
$.fn.foo.bar
$.fn.foo.baz
我使用標準的jQuery插件模式。第一個實際上是對其名稱空間的其餘插件的代理或「外觀」。 例如,當我打電話$('#el').foo()
,引擎蓋下我也呼籲:
var context = this; // context is equal to $('#el') $(context).foo['bar'].apply(context); $(context).foo['baz'].apply(context);
有兩個問題,當我想打電話給只(不含$.fn.foo
)$('#el').foo.bar()
。第一個問題是沒有$.fn.foo
命名空間,但我可以創建它,所以這實際上沒有問題。第二個問題是內部$.fn.foo.bar
中的this
等於document
對象,但我想等於$('#el')
。我怎樣才能做到這一點?
所以,做一個長話短說,都應該工作:
$('#el').foo(); // This also calls foo.bar and foo.baz under the hood $('#el').foo.bar(); // I'm calling foo.bar explicitly
並沒有叫「$(背景。)包含.foo [ '巴茲']應用(上下文);」多餘的不應該只是「$(context).foo ['baz'];」 –
@Keith如果他這樣稱呼,「this'將成爲文檔而不是被調用的元素。 –
這種命名空間是憤怒的。請寫一個像模塊化代碼的明智體系結構,或者使用任何功能或OO模式 – Raynos