来自单个对象的多个jQuery插件

时间:2011-06-05 10:29:11

标签: jquery jquery-plugins

如何从单个对象创建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

1 个答案:

答案 0 :(得分:2)

你不能,因为如果你试图以这种方式命名事物,你会在方法调用中弄乱this的值。 (具体来说,this将引用$.fn.myPlugin而不是实际的jQuery对象。)

JavaScript中的

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}})。