如何从单个对象创建jQuery的多个插件?
最初我尝试过:
(function($) {
$.fn.myPlugin = {
plugin_1: function(options) { alert(this.text( )); },
plugin_2: function(options) { alert(this.text( )); }
}
})(jQuery);
然而,在$('#element').myPlugin.plugin_1( );
完成后,我得到了:this.text is not a function
答案 0 :(得分:2)
你不能,因为如果你试图以这种方式命名事物,你会在方法调用中弄乱this
的值。 (具体来说,this
将引用$.fn.myPlugin
而不是实际的jQuery对象。)
this
与您可能熟悉的其他语言(如C ++,Java或C#)完全不同。它完全由如何调用函数定义,而不是定义函数的位置。 (有关this
的更多信息: Mythical Methods 。)
设置主要方式this
的方法是调用对象属性的函数:
foo.bar();
告诉JavaScript在bar
对象上查找属性foo
并尝试调用它,在调用中设置this = foo
。因此,您可以看到为什么$("selector").myPlugin.plugin_1()
,this
最终引用myPlugin
,而不是jQuery对象。
您必须使用命名约定,例如$.fn.myPlugin_plugin1
,或者只是将它们分开,但使用相似的名称,人们知道它们已被分组($.fn.myPluginFoo
,{{ 1}})。