编写更好的jQuery插件

目前我有我的jQuery插件运行它的逻辑在if statments。

例如我有:

(function($) { $.fn.myplugin = function(action) { if(action == "foo"){ } if(action == "bar"){ } if(action == "grapefruits"){ } } })(jQuery); 

有没有更好的方法来解决这个问题?

对于事件处理程序也一样,我可以在插件中声明它们吗?

您可以在对象中存储不同的函数并使用索引器,如下所示:

 (function($) { var methods = { foo: function(action) { ... }, bar: function(action, someParam) { ... }, grapefruits: function(action, param1, param2) { ... }, ... }; $.fn.myplugin = function(action) { methods[action].apply(this, arguments); } })(jQuery); 

没有理由多次检查动作,是吗? 你也可以使用其他if.I不喜欢switch个人的语法,并喜欢这种风格。 你可以这样做

  if(action == "foo"){ } else if(action == "bar"){ } else if(action == "grapefruits"){ } else{ //this is the default/unspecified case } 

另一种选择是将每个作为名称存储在对象中。 例如,这在Python中也是如此。

  var plugin_actions={ 'foo':function(){}, 'bar':function(){}, 'grapefruits':function(){} } plugin_actions[action]();